Насколько я знаю, вы не смогли отобразить диалоговое окно ON SERVER из приложения ASP.NET, так как это диалоговое окно отображается на сервере, а не в браузере.
В asp.net MVCapplication вы можете перенаправить пользователя на страницу входа в Azure Ad, чтобы разрешить ввод учетных данных пользователя вместо диалогового окна показа.
Подробнее, вы можете обратиться к тестовым демонстрационным кодам ниже:
using Microsoft.IdentityModel.Clients.ActiveDirectory;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Globalization;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace MVCNormallIssue.Controllers
{
public class AADAuthController : Controller
{
private static string clientId = ConfigurationManager.AppSettings["ida:ClientId"];
private static string appKey = ConfigurationManager.AppSettings["ida:AppKey"];
private static string aadInstance = ConfigurationManager.AppSettings["ida:AADInstance"];
private static string tenant = ConfigurationManager.AppSettings["ida:Tenant"];
private static string redirectUri = ConfigurationManager.AppSettings["ida:RedirectUri"];
public static readonly string Authority = String.Format(CultureInfo.InvariantCulture, aadInstance, tenant);
// GET: AADAuth
public ActionResult Index()
{
if (Request.Params["code"] != null)
{
var accesstoken = AcquireTokenWithResource(resource: "https://graph.microsoft.com/");
Response.Write(accesstoken);
}
else
{
GetAuthorizationCode();
}
//AuthenticationContext authContext = new AuthenticationContext(Authority);
// AuthenticationResult result = null;
// Uri uri = new Uri(redirectUri);
// result = authContext.AcquireTokenAsync("https://graph.windows.net", clientId, uri, new PlatformParameters(PromptBehavior.Always)).Result;
return View();
}
public void GetAuthorizationCode()
{
JObject response = new JObject();
var parameters = new Dictionary<string, string>
{
{ "response_type", "code" },
{ "client_id", clientId },
{ "redirect_uri", "http://localhost:51939/AADAuth/index" },
{ "prompt", "login"},
{ "scope", "openid"}
};
var requestUrl = string.Format("{0}/authorize?{1}", EndPointUrl, BuildQueryString(parameters));
Response.Redirect(requestUrl);
}
public string AcquireTokenWithResource(string resource)
{
var code = Request.Params["code"];
AuthenticationContext ac =
new AuthenticationContext(string.Format("https://login.microsoftonline.com/{0}", tenant
));
ClientCredential clcred =
new ClientCredential(clientId, appKey);
var token =
ac.AcquireTokenByAuthorizationCodeAsync(code,
new Uri("http://localhost:51939/AADAuth/index"), clcred, resource).Result.AccessToken;
return token;
}
private string BuildQueryString(IDictionary<string, string> parameters)
{
var list = new List<string>();
foreach (var parameter in parameters)
{
list.Add(string.Format("{0}={1}", parameter.Key, HttpUtility.UrlEncode(parameter.Value)));
}
return string.Join("&", list);
}
protected string EndPointUrl
{
get
{
return string.Format("{0}/{1}/{2}", "https://login.microsoftonline.com", tenant, @"oauth2/");
}
}
}
}
Результат: