身份服务器 3 用户会话生命周期

Posted

技术标签:

【中文标题】身份服务器 3 用户会话生命周期【英文标题】:Identity Server 3 User Session Lifetime 【发布时间】:2017-07-10 20:37:49 【问题描述】:

我正在使用身份服务器 3 保护 Web 应用程序。我的应用程序分为 2 个 oidc 客户端、一个 ASP.Net MVC 客户端和一个使用 oidc-client javascript 库的 javascript(angular) 客户端。

当用户第一次访问 Web 应用程序时,我们会重定向登录到身份服务器,该身份服务器会登录 mvc 客户端。然后使用 oidc-library 中的静默登录功能登录 javascript 客户端。

我想控制用户访问登录页面以再次登录的频率,我想设置此设置,以便用户必须每天或每 8 小时访问一次登录页面。

身份服务器中是否有一个设置可以控制用户会话的活动时间,而无需再次登录。

我搜索了文档并找到了一些 Lifetime 设置,但不清楚我应该使用哪些设置,到目前为止,反复试验还没有产生任何结果。

【问题讨论】:

【参考方案1】:

您希望控制的是 cookie IdentityServer 本身问题的生命周期。一旦此 cookie 过期,下次某个客户端应用程序需要再次进行身份验证时,用户将需要重新输入其凭据。

此 cookie 生命周期由 CookieOption 中的 CookieOption 中的 IdentityServerOptions(见下文)控制,默认为 10 小时。

var options = new IdentityServerOptions

    Factory = factory,
    SigningCertificate = Cert.Load(),
    AuthenticationOptions = new AuthenticationOptions
    
        CookieOptions = new IdentityServer3.Core.Configuration.CookieOptions
        
            ExpireTimeSpan = TimeSpan.FromHours(24)
        
    
;

【讨论】:

谢谢。我尝试将超时更改为 2 分钟以进行测试,但它没有效果。当我在 chrome 中调试时,我可以看到 cookie 都设置为会话而不是过期。是否有另一种设置可以改变我可以结合使用的这种行为。我看过 CookieOptions 但没有什么特别突出的? 如果您不点击登录页面上的“记住我”按钮,您将获得一个会话 cookie。否则你会得到一个你声明的有生命周期的cookie。要解决此问题并强制您的 cookie 生命周期,请在 CookieOptions 中将 IsPersistent 设置为 true 并将 AllowRememberMe 设置为 false。 查看identityserver.github.io/Documentation/docsv2/configuration/… 了解所有这些选项的完整说明。 我已经尝试将 IsPersistent 选项与 ExpireTimeSpan 选项结合使用,但没有成功。我没有设置 AllowRememberMe,所以我会试一试,尽管这会控制 cookie 是持久的还是会话的,这似乎很奇怪。该文档暗示 RememberMeDuration 设置与 AllowRememberMe 而不是 ExpireTimeSpan 一起使用

以上是关于身份服务器 3 用户会话生命周期的主要内容,如果未能解决你的问题,请参考以下文章

HttpSession会话状态的生命周期

php 会话控制(关于session的维护与生命周期)

如何在 Symfony 中延长会话 cookie 的生命周期?

具有自定义生命周期的身份服务器 4 访问令牌

JavaWeb关于session生命周期的几种设置方法

Laravel cookie 会话生命周期