как исправить ошибку входа AAD в контроллер MVC - PullRequest
0 голосов
/ 21 июня 2019

Я пытаюсь заставить пользователя войти в систему с его учетными данными AAD, чтобы я мог получить его AuthenticationResult UserInfo.

Я вижу эту ошибку в IIS 10: azure active directory error Отображение модального диалогового окна или формы, когда приложение не работает в режиме UserInteractive, не является допустимой операцией

В моем контроллере MVC у меня есть этот код:

            AuthenticationContext authContext = new AuthenticationContext(authority);
        AuthenticationResult result = null;
        try
        {
            result = authContext.AcquireTokenAsync(resourceId, clientId, redirectUri, new PlatformParameters(PromptBehavior.Always)).Result;

Локально сработало, всплыло окно AAD.

Спасибо, Питер

1 Ответ

0 голосов
/ 21 июня 2019

Насколько я знаю, вы не смогли отобразить диалоговое окно 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/");
            }
        }

    }
}

Результат:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...