Я добавляю аутентификацию 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. Роли и т. д. не обновляются.