При использовании одиночного пения Azure в качестве метода аутентификации мое приложение застревает в бесконечном цикле при перенаправлении в мое приложение - PullRequest
0 голосов
/ 10 мая 2018

у нас есть веб-приложение, встроенное в c # и Angularjs, и конфигурация для использования проверки подлинности Windows, недавно я удалил проверку подлинности Windows и добавил единый вход (Azure AD), проблема, когда я ввел свои учетные данные и запись в журнал, никогда не отнимает у меняк веб-приложению это похоже на цикл при попытке входа в систему, вот так выглядит мой журнал.

2018-05-10 16:28:05 :: 1 POST / portal - 443 - ::1 Mozilla / 5.0 + (Windows + NT + 10.0; + Win64; + x64; + rv: 59.0) + Gecko / 20100101 + Firefox / 59.0 https://login.microsoftonline.com/f8b6a2d7-0364-40ce-943e-eb02d6c35deb/oauth2/authorize?client_id=359xxxx2-877e-xxx-9538-9e_xxxxxxxxxxxxxxxxxxxx

2018-05-10 16:28:05:: 1 GET / portal - 80 - :: 1 Mozilla / 5.0 + (Windows + NT + 10.0; + Win64; + x64; + rv: 59.0) + Gecko / 20100101 + Firefox / 59.0 - 302 0 0 2

2018-05-10 16:28:35 :: 1 POST / portal - 443 - :: 1 Mozilla / 5.0 + (Windows + NT + 10.0; + Win64; + x64; + rv: 59.0) + Gecko /20100101 + Firefox / 59,0 https://login.microsoftonline.com/f8b6axce-943e-eb02dxdeb/oauth2/authx272-877e-4xx4-9538-9e63a5a810d32Exxxxxxx.40306.1x54 302 0 64 29x4

2018-05-10 16:36:15 :: 1 GET / portal - 80 - :: 1 Mozilla / 5.0 + (Windows +NT + 10.0; + Win64; + x64) + AppleWebKit / 537.36 + (KHTML, + like + Gecko) + Chrome / 66.0.3359.139 + Safari / 537.36 - 302 0 0 2

2018-05-10 16:37:36 :: 1 POST / portal - 443 - :: 1 Mozilla / 5.0 + (Windows + NT + 10.0; + Win64; + x64) + AppleWebKit / 537.36 + (KHTML, + like + Gecko)+ Chrome / 66.0.3359.139 + Safari / 537.36 https://login.microsoftonline.com/kmsi 302 0 64 43715

И так далее и далее!

my StartUp.Auth.cs

public void ConfigureAuth(IAppBuilder app)
    {
        ApplicationDbContext db = new ApplicationDbContext();

        app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);

        app.UseCookieAuthentication(new CookieAuthenticationOptions());

        app.UseOpenIdConnectAuthentication(
            new OpenIdConnectAuthenticationOptions
            {
                ClientId = clientId,
                Authority = Authority,
                PostLogoutRedirectUri = postLogoutRedirectUri,

                Notifications = new OpenIdConnectAuthenticationNotifications()
                {
                    // If there is a code in the OpenID Connect response, redeem it for an access token and refresh token, and store those away.
                    AuthorizationCodeReceived = (context) =>
                    {
                        var code = context.Code;
                        ClientCredential credential = new ClientCredential(clientId, appKey);
                        string signedInUserID = context.AuthenticationTicket.Identity.FindFirst(ClaimTypes.NameIdentifier).Value;
                        AuthenticationContext authContext = new AuthenticationContext(Authority, new ADALTokenCache(signedInUserID));
                        return authContext.AcquireTokenByAuthorizationCodeAsync(
                           code, new Uri(HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Path)), credential, graphResourceId);
                    }
                }

Любое предложение, что может происходить здесь

1 Ответ

0 голосов
/ 15 мая 2018

При использовании одиночного пения Azure в качестве метода аутентификации мое приложение застревает в бесконечном цикле при перенаправлении на мое приложение

Я бы порекомендовал вам проверить, явно ли вы украсили свой метод действия иликонтроллер с AuthorizeAttribute и укажите Roles или Users, которым разрешен доступ к соответствующему ресурсу.Кроме того, здесь есть похожая проблема , на которую вы можете сослаться.

Исходя из своего кода, вы используете промежуточное ПО ASP.NET OpenID Connect OWIN для входа пользователей из клиента AAD.Вы можете выполнить подробное руководство по Интегрировать Azure AD в веб-приложение, используя OpenID Connect , чтобы сравнить его с кодом, чтобы сузить эту проблему.

Более того, вы также можете использовать ADAL для JavaScript в своемПриложение AngularJS для получения токена в вашем веб-интерфейсе, а затем вашему бэкэнду просто необходимо проверить токен-носитель.Подробности, которым можно следовать Вызов веб-API, защищенного Azure AD, в одностраничном приложении AngularJS .

...