如果删除用户,请删除auth cookie

时间:2014-08-12 01:31:27

标签: asp.net asp.net-membership

有没有办法删除身份验证cookie,或者从asp.net成员资格数据库中删除用户后签名?默认情况下,如果用户从数据库中删除,用户仍然可以浏览网站,因为他们仍然拥有有效的身份验证cookie。

我在global.asax内尝试了不同的东西,但似乎没有任何效果。这样的事情甚至可能吗?

1 个答案:

答案 0 :(得分:0)

见这里:FormsAuthentication.SignOut Method。虽然这是指用户未注销服务器端,但可以使用类似的方法来管理已删除的用户。

  

调用SignOut方法只会删除表单身份验证Cookie。 Web服务器不存储有效和过期的身份验证票证以供以后进行比较。如果恶意用户获得有效的表单身份验证cookie,这会使您的站点容易受到重播攻击。要在使用表单身份验证cookie时提高安全性,您应该执行以下操作:

     
      
  • 通过将SlidingExpiration属性设置为false,对表单身份验证Cookie使用绝对过期。这限制了可以重放被劫持cookie的窗口。
  •   
  • 通过将RequireSSL属性设置为true并在SSL下运行整个网站,仅通过安全套接字层(SSL)发出并接受身份验证Cookie。将RequireSSL属性设置为true可确保ASP.NET永远不会通过非SSL连接向浏览器发送身份验证cookie。但是,客户端可能不会遵守cookie上的安全设置。这意味着客户端可能会通过非SSL连接发送表单身份验证cookie,从而使其容易受到劫持。您可以通过在SSL下运行整个网站来阻止客户端以明文形式发送表单身份验证cookie。
  •   
  • 使用服务器上的持久存储来记录用户何时退出网站,然后使用应用程序事件(如PostAuthenticateRequest事件)来确定当前用户是否使用表单身份验证进行身份验证。如果用户使用表单身份验证进行身份验证,并且持久存储中的信息指示用户已注销,请立即清除身份验证cookie并将浏览器重定向回登录页面。成功登录后,更新存储以反映用户已登录。使用此方法时,应用程序必须跟踪用户的登录状态,并且必须强制空闲用户注销。
  •   

第三种选择是最安全的,但需要付出最大的努力。国际海事组织,前两个没有充分解决问题。

也可以store custom information in the Forms Authentication Ticket。您可以在此故障单中存储最后一次显式注销时间,并根据服务器端数据库记录进行检查。请注意,如果此记录位于用户级别而非会话级别,则该帐户下的所有登录都将同时注销。

在您的情况下,如果您要删除服务器端用户和会话记录,由于记录不存在,您也将无法通过身份验证请求。

我还建议存储和检查密码更改的最后日期/时间 - 如果用户更新密码,那么所有现有会话都会被注销。