我一直在阅读IdentityServer4问题线程大约一天,但我仍然对会话/登录cookie过期感到困惑。
如果我像这样设置客户端的cookie过期(我使用带有IdentityServer4服务器的IdentityServer3客户端以启用ASP.NET 4.x webapps进行身份验证):
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = "Cookies",
ExpireTimeSpan = new TimeSpan(10, 0, 0),
SlidingExpiration = true
});
我可以打开Chrome开发者工具(F12)并查看Cookie,看看它们一旦浏览器关闭就会设置为过期(IdentityServer的所有Cookie的失效日期都将设置为过期" 1969- 12-31T23:59:59.000Z",换句话说,客户到期时间没有。
无论是否将客户端和服务器身份验证选项UseTokenLifetime设置为true,都是如此:
客户方:
app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
{
...
UseTokenLifetime = true,
...
服务器端:
services.AddAuthentication()
.AddOpenIdConnect("MyLoginScheme", "A login scheme", options =>
...
options.UseTokenLifetime = true;
...
我不确定如何让我接受客户端Cookie的生命周期。
答案 0 :(得分:2)
试试这个:
app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
{
// …
Notifications = new OpenIdConnectAuthenticationNotifications
{
SecurityTokenValidated = async n =>
{
// Set persistent cookie,
n.AuthenticationTicket.Properties.IsPersistent = true;
// and the expiration
n.AuthenticationTicket.Properties.ExpiresUtc = DateTime.Today.AddDays(1);
},
},
// …
}
对于IDS的Cookie过期,您可以在身份服务器的ConfigureServices
中进行设置:
services.Configure<IdentityOptions>(options =>
{
// …
options.Cookies.ApplicationCookie.ExpireTimeSpan = TimeSpan.FromDays(1);
// …
});