5 c# authentication cookies asp.net-mvc owin
我有一个使用会话存储和 OWIN cookie 身份验证的半单页应用程序(登录后的所有服务器交互都通过 ajax 调用在一页上进行)。会话和 cookie 的过期时间都设置为 15 分钟,并且 cookie 配置为使用滑动过期。
在每次服务器交互时,客户端上的计时器都会重置为 15 分钟。如果 14 分钟内没有记录任何活动,则会显示一个带有自动收报机的模式,提醒用户会话即将超时。
我们遇到了一个问题,在某些情况下,我们的会话比 OWIN cookie 寿命更长。
根据CookieAuthenticationOptions类:
SlidingExpiration 设置为 true 以指示中间件在处理超过过期窗口一半以上的请求时重新发布具有新过期时间的新 cookie 。
我们有这样一个场景,用户在“过期窗口过半”之前使用应用程序,然后让应用程序闲置几分钟。当用户看到会话过期通知时,他们尝试更新他们的会话。但由于OWIN cookie 从未更新,应用程序超时并将它们重定向到登录页面(过早基于到期通知所说的内容)。
这篇支持文章准确地说明了我们的情况:
让我们举个例子:如果登录页面是在 5:00 00:00:00 PM 访问的,如果 timeout 属性为 10 并且 slideExpiration 属性设置为 TRUE,那么它应该在 5:10 00:00:00 PM 过期. 现在,如果在下午 5:05 00:00:00 再次浏览任何网页,则 cookie 和票证超时期限将重置为下午 5:15 00:00:00。
注意 如果在过期时间过半之前访问网页,则不会重置票证过期时间。例如,如果在下午 5:04 00:00:00 再次访问任何网页,则不会重置 cookie 和票证超时期限。
有没有人遇到过这种情况?我们如何避免它?调整 OWIN 超时只会延长问题。
我不禁认为这要么是 OWIN 框架中的一个可怕的设计缺陷,要么是我们没有正确使用它。
任何帮助表示赞赏。谢谢。
小智 2
我们最终实现的解决方案是使用我们的保持活动逻辑的变通方法。我真的希望他们能够以更传统的方式实施“滑动到期”,但现在必须这样做。
解决方案:
仅在 OWIN cookie 生命周期过去一半之前向服务器发送保持活动请求。发送 keep-alive 消息后,cookie 将被更新,这使会话和 cookie 超时保持同步。
| 归档时间: |
|
| 查看次数: |
3644 次 |
| 最近记录: |