Azure Аутентификация AD прерывает действия HTTP Post, когда время сеанса истекло - PullRequest
0 голосов
/ 08 января 2020

Я недавно перешел с windows аутентификации на Azure AD, используя примерно код "из коробки";

    public void ConfigureAuth(IAppBuilder app)
    {

        app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);

        app.UseKentorOwinCookieSaver();
        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));
                        AuthenticationContext authContext = new AuthenticationContext(Authority);
                        return authContext.AcquireTokenByAuthorizationCodeAsync(
                           code, new Uri(HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Path)), credential, graphResourceId);
                    }
                }
            });
    }

Наши пользователи начали периодически получать ошибки 404 при попытке отправить определенные формы. Я думаю, что мне удалось воссоздать проблему, удалив файлы cookie, поэтому я подозреваю, что она связана с естественным истечением времени сеанса.

Если я посмотрю поток с запросом HTTP GET, он будет выглядеть так:

Все работает лечить ...

Однако для HTTP POST;

Сбой, поскольку конечная точка принимает только запросы HTTP POST.

Есть идеи, если / как я могу это исправить? Я бы подумал, что встроенное отслеживание состояния или что бы оно ни делало, сохранит исходный запрос и продолжит с того места, где оно было прервано, независимо от ...

1 Ответ

0 голосов
/ 08 января 2020

Похоже, вы не используете токен кеш. Это означает, что сеанс пользователя истекает примерно через час после входа в приложение.

Для решения этой проблемы следует использовать AcquireTokenSilentAsyn c всякий раз, когда приложению требуется токен доступа. Этот метод автоматически обновит sh токен для вас, используя его в кэш-памяти. Для получения более подробной информации см https://github.com/AzureAD/azure-activedirectory-library-for-dotnet/wiki/AcquireTokenSilentAsync-using-a-cached-token

...