Тайм-аут утверждения личности - PullRequest
0 голосов
/ 06 июня 2018

У меня есть приложение ASP.Net MVC, использующее аутентификацию Azure B2C, и роли идентификации для авторизации пользователей для доступа к частям приложения.Однако есть проблема, когда примерно через час выясняется, что время ролей истекло.Моя текущая теория заключается в том, что, поскольку он использует проверку подлинности cookie, срок действия cookie истекает, и поэтому роль отозвана.

Код для настройки этого приведен здесь:

public void ConfigureAuth(IAppBuilder app)
{
    app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);

    app.UseCookieAuthentication(new CookieAuthenticationOptions
    {
        CookieManager = new SystemWebCookieManager(),
        SlidingExpiration = true
    });

    app.UseOpenIdConnectAuthentication( ...

Обратите внимание, что нет ExpireTimeSpan установлено здесь.Претензии добавляются здесь:

public class MvcApplication : HttpApplication
{
    void Application_PostAuthenticateRequest()
    {
        ...

        if (Request.IsAuthenticated)
        {
            var identity = ClaimsPrincipal.Current.Identities.First();

            var myClaim = new Claim("Role", "admin");                
            identity.AddClaim(myClaim);
            ...

После тайм-аута ClaimsPrincipal.Current.Claims пусты;поэтому пользовательские утверждения, которые я добавляю, и утверждения, которые выдает MS (например, nameidentifier).Как это очищается, и где находится настройка (при условии, что это настройка), которая сообщает , когда очистить?

1 Ответ

0 голосов
/ 15 июня 2018

Я полагаю, проблема в настройке

SlidingExpiration = true

, а не в настройке

UseTokenLifetime = false

(в OpenIdConnectAuthenticationOptions)

Ваш идентификатор, выданный удостоверениемсрок действия провайдера истекает через час (а у куки нет).И не может быть переиздан на местном уровне.Для получения нового токена необходимо выполнить новое задание (обратное путешествие в IdP).На самом деле поведение, которое вы объяснили (в какой-то момент все еще аутентифицировано, но пропустило все cookie), выглядит некорректно, но, вероятно, объяснение недостаточно полное.

В любом случае, если вы хотите увеличить время жизни токена идентификации, вы можете изменитьнастройку в IdP (но не уверенную, если Azure B2C предлагает такую ​​настройку), установите UseTokenLifetime = false в OpenIdConnectAuthenticationOptions или выдайте свой собственный токен (со всеми необходимыми cookie-файлами и желаемым сроком службы) при обратном вызове внешней аутентификации.Но, опять же, самый простой способ - просто отключить скольжение, положиться на свой внешний IdP и перейти на новый токен, когда истекает срок действия старого.

...