2

我们在 ASP.Net MVC3 站点中启用了无 cookie 身份验证和会话。我们遇到的问题是,如果您注销用户,它不会使存储在无 cookie 字符串中的已创建 cookie/会话无效。场景如下:

用户使用无cookie身份验证登录网站、注册和登录;用户现在在其 url 中有无 cookie 票证。用户通过创建桌面快捷方式或复制和粘贴来复制 url。

用户退出站点,调用 FormAuthentication.SignOut() 使票证无效并重定向到登录页面。

用户现在可以简单地将该 URL 复制并粘贴到任何浏览器中,甚至可以转到另一台计算机,即使他们已经注销,该站点也会接受该身份验证票;造成严重的安全风险。

有没有办法禁用所有以前的 cookie,无论是否无 cookie?目前,我们的流程适用于基于 cookie 的会话/登录;我们只需要一个无cookie的解决方案。

到目前为止,我们发现的唯一可能的解决方案是跟踪 db 中的所有 cookie 并使数据库中的 cookie 无效,并检查 db 以确保当前 cookie 仍然有效。这将显着影响性能,因此我们希望在继续之前验证这是唯一/最佳的解决方案。

谢谢

4

2 回答 2

2

本质上,在 url /F-long text/ 中存储了您的 FormAuthentication 票证。这张票在它自己的有效期内(至少如果它不是持久的),在那个时间跨度之后,url变得无效。所以我建议简单地减少时间跨度。如果显式注销是“必须具备的”,则只有在 webfarm 中并且没有某种横向扩展解决方案时才必须使用 db。如果你有一个盒子,你可以使用 HttpCache 来做脏活。此外,我将只使用 UserID,而不是整个 cookie(即在登录时将具有一定时间跨度的 UserID 添加到活动用户 ID 范围内,在 PostAuthorize 上的 Global.asax 检查用户是否在活动用户 ID 内,如果他在,则延长他的时间跨度并扔掉他否则,在注销时删除他)。

于 2013-06-19T14:19:12.750 回答
0

在 SignOut 之后使用 Session.Abandon() 丢弃会话

于 2013-06-19T14:07:21.517 回答