Asp.net 当用户';s会话到期?

Asp.net 当用户';s会话到期?,asp.net,ssl,certificate,Asp.net,Ssl,Certificate,我正在开发一个ASP.NET应用程序,其中我们的用户通过HTTPS使用客户端证书进行身份验证。我们的用户只使用IE7 一旦成功使用客户端证书进行身份验证,它将保留在浏览器的SSL缓存中,直到进程关闭或用户手动清除SSL缓存。我们希望能够在用户注销或会话过期时清除SSL缓存,以提高系统的安全性 我们的客户已经使用智能卡访问系统,当智能卡从客户机上卸下时,系统会自动卸载证书,但这根本无法清除浏览器缓存,留下了另一个与真正用户访问同一台机器的用户的潜在攻击途径 我已经了解了如何从JavaScript中

我正在开发一个ASP.NET应用程序,其中我们的用户通过HTTPS使用客户端证书进行身份验证。我们的用户只使用IE7

一旦成功使用客户端证书进行身份验证,它将保留在浏览器的SSL缓存中,直到进程关闭或用户手动清除SSL缓存。我们希望能够在用户注销或会话过期时清除SSL缓存,以提高系统的安全性

我们的客户已经使用智能卡访问系统,当智能卡从客户机上卸下时,系统会自动卸载证书,但这根本无法清除浏览器缓存,留下了另一个与真正用户访问同一台机器的用户的潜在攻击途径

我已经了解了如何从JavaScript中实际清除缓存:

document.execCommand(“ClearAuthenticationCache”)

当用户显式注销时,它可以完美地工作,因为我们可以在允许用户再次登录之前在客户端上执行脚本

注意:IE7仅允许在web服务器上禁用HTTP Keep Alives时以编程方式清除缓存

这里有一个棘手的问题——如果客户端会话过期,在用户再次尝试登录之前,我不知道如何在浏览器中处理这个问题。当他们进入登录页面时,我无法清除状态,因为在服务器上执行页面之前,我需要清除状态并选择一个新证书


有什么想法吗?很抱歉问题太长,但背景对这一点很重要。

没关系,我想出了一个很好的解决方案:

  • 当用户成功登录时,我们会创建一个额外的会话cookie,该cookie在浏览器关闭之前不会过期

  • 如果用户稍后返回登录页面,并且请求未经验证,我们将检查会话cookie是否存在-如果存在,我们知道用户以前有一个会话,因此我们显式地将其注销,就像我们对用户发起的注销所做的一样。如果会话cookie不存在,那么我们将尝试使用用户的证书自动登录

  • 每次显式注销都会删除自定义会话cookie,每次成功登录都会重新填充自定义会话cookie


这为用户提供了最佳体验,并保证只有在会话仍然有效时(15分钟,滑动)才会缓存证书。此外,用户无法删除会话cookie,因此无法绕过此行为。他们也不能在不接受会话cookie的情况下使用该站点

你如何明确地“注销他们”?如果这是对客户端“ClearAuthenticationCache”的JS调用,超级用户可以绕过该调用(破解客户端代码)。根据Laurent的问题,我们将他们注销到服务器上,只使用普通的FormsAuthentication.SignOut()方法-无客户端交互。