【发布时间】:2020-02-02 04:30:39
【问题描述】:
我正在向 ASP.NET Core 应用程序添加 Azure AD 身份验证。应用程序在 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);
});
更新:在 Cookie 配置中将 Expires 更改为 MaxAge 会在浏览器中为浏览器中的 Cookie 设置一个 Max Age,并且该浏览器可以正常工作。但是为什么ExpireTimeSpan 不做任何事情并接受超过 1 分钟的 Cookie?
Cookie 选项更新为:
.AddCookie(options =>
{
options.Events.OnSignedIn = async e =>
{
e.Properties.IsPersistent = true;
e.Properties.ExpiresUtc = DateTime.UtcNow.AddMinutes(1);
};
});
但它仍然接受更早的 Cookie。如果我登录,请在页面上停留 5 分钟,然后刷新它使用相同的 cookie 进行身份验证。角色等未更新。
【问题讨论】:
标签: c# asp.net-core cookies azure-active-directory