IdentityServer4 cookie到期

时间:2018-03-16 16:46:28

标签: cookies identityserver4

我一直在阅读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的生命周期。

1 个答案:

答案 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);
            // …
        });