Срок действия файла cookie для аутентификации Azure AD не истек - PullRequest
0 голосов
/ 03 октября 2019

Я добавляю аутентификацию Azure AD в приложение ASP.NET Core. Приложение зарегистрировано в Azure AD и имеет настраиваемые роли в манифесте. Эти роли используются для политик авторизации в приложении. Все работает, когда пользователи входят в систему, они перенаправляются для входа в Azure и возвращаются с файлом cookie, содержащим их утверждения.

Моя проблема заключается в том, что если файл cookie не удален в браузере, эти утверждения сохраняются и отображаются. не обновляется при изменении ролей в Azure. Например, если пользователь входит в систему, то я удаляю их из роли, они по-прежнему будут отображаться приложением как эта роль.

Я пытался установить cookie-файл с истечением 1 минуты, но это нене оказывает влияния, и у меня все та же проблема. Вот как настраивается аутентификация в Startup. (AddAzureAd() исходит из этого примера: https://github.com/Azure-Samples/active-directory-dotnet-webapp-openidconnect-aspnetcore/blob/master/Extensions/AzureAdAuthenticationBuilderExtensions.cs):

        services.AddAuthentication(options =>
        {
            options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
            options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
        })
        .AddAzureAd(options =>
        {
            options.ClientId = azureAdOptions.ClientId;
            options.ClientSecret = azureAdOptions.ClientSecret;
            options.Instance = azureAdOptions.Instance;
            options.Domain = azureAdOptions.Domain;
            options.TenantId = azureAdOptions.TenantId;
            options.CallbackPath = azureAdOptions.CallbackPath;
        })
        .AddCookie(options =>
        {
            options.Cookie.Expiration = TimeSpan.FromMinutes(1);
            options.ExpireTimeSpan = TimeSpan.FromMinutes(1);
        });

Обновление: изменение Expires на MaxAge в конфигурации Cookie устанавливает максимальный возраст для Cookie в браузере, который браузер уважает,и работает как надо. Но почему ExpireTimeSpan ничего не делает и не принимает куки-файлы старше 1 минуты?

Параметры куки-файлов обновлены до следующего:

        .AddCookie(options =>
        {
            options.Events.OnSignedIn = async e =>
            {
                e.Properties.IsPersistent = true;
                e.Properties.ExpiresUtc = DateTime.UtcNow.AddMinutes(1);
            };
        });

Но он по-прежнему принимает куки-файлынамного старше. Если я войду в систему, останусь на странице в течение 5 минут, а затем обновлю ее, проверяет подлинность с использованием того же файла cookie. Роли и т. д. не обновляются.

Ответы [ 2 ]

2 голосов
/ 07 октября 2019

Если вы хотите контролировать срок действия билета аутентификации, вы можете использовать:

services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
            .AddAzureAD(options => Configuration.Bind("AzureAd", options));

services.Configure<OpenIdConnectOptions>(AzureADDefaults.OpenIdScheme, options =>
{
    options.UseTokenLifetime = false;
    ...

});

services.Configure<CookieAuthenticationOptions>(AzureADDefaults.CookieScheme, options =>
{
    options.ExpireTimeSpan = TimeSpan.FromMinutes(1);
    ...

});

Чтобы через 1 минуту срок действия билета истек, при запросе на странице он отправит запрос на авторизацию в AAD,если пользователь AAD активен, он автоматически снова войдет в систему, чтобы получить новые токены и сопоставить их с заявками пользователей.

1 голос
/ 04 октября 2019

Но почему ExpireTimeSpan ничего не делает и не принимает куки-файлы старше 1 минуты?

Абсолютное время истечения можно установить с помощью ExpiresUtc. Чтобы создать постоянный файл cookie, необходимо также установить IsPersistent. В противном случае файл cookie создается с временем жизни на основе сеанса и может истечь либо до, либо после билета аутентификации, который он содержит. Когда установлено значение ExpiresUtc, оно переопределяет значение параметра ExpireTimeSpan.

await HttpContext.SignInAsync(
    CookieAuthenticationDefaults.AuthenticationScheme,
    new ClaimsPrincipal(claimsIdentity),
    new AuthenticationProperties
    {
        IsPersistent = true,
        ExpiresUtc = DateTime.UtcNow.AddMinutes(20)
    }
);

TimeSpan, после которого истекает срок действия билета аутентификации, сохраненного в файле cookie. ExpireTimeSpan добавляется к текущему времени, чтобы создать время истечения для тикета. Значение ExpiredTimeSpan всегда входит в зашифрованный AuthTicket, проверенный сервером. Он также может входить в заголовок Set-Cookie, но только если установлено значение IsPersistent. Чтобы установить для IsPersistent значение true, настройте свойства AuthenticationProperties, передаваемые SignInAsync. Значение по умолчанию ExpireTimeSpan составляет 14 дней.

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