2009-01-08 447 views
66

使用ASP.Net Forms身份验证时,我遇到了.ASPXAUTH cookie。我有几个问题:什么是ASPXAUTH cookie?

  • 这个cookie的目的是什么?
  • 这个cookie的位置是什么?

回答

74

ASPXAUTH cookie用于确定用户是否已通过身份验证。

至于cookie的位置,这取决于您的浏览器。如果您使用Firefox,您可以通过单击工具 - >选项 - >隐私来查看cookie。然后向下滚动到该域并将其展开以查看Cookie及其值。该值使用计算机密钥(位于服务器的machine.config或web.config文件中)进行加密,因此在客户端查看cookie不会真正为您提供任何信息。您可以解密/使用查看服务器端的值:

HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];//.ASPXAUTH 
FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value); 

其中authTicket有以下字段:

enter image description here

声明“ASPXAUTH基本上是用来维持ASP.NET会话状态”是不正确的。 ASP.NET发布完全不同的cookie,名为ASP.NET_SessionId,用于跟踪会话状态。

+2

在Firefox v8上。0可以找到cookie如下:工具 - >页面信息 - >安全 - >查看Cookies – Anthony 2011-11-25 09:51:43

6

实际上,.ASPXAUTH cookie不能准确地告诉您用户何时进行真正的身份验证。当用户注销应用程序时,将从浏览器中删除.ASPXAUTH cookie。但是,如果你回到现场的时候(与形式的权威性的cookie超时)在短期内,并用以下编辑新ASP.NET_SessionId cookie的:从“ASP

  • 改变“名称”字段.NET_SessionId“到” .ASPXAUTH”
  • 变化‘值’,从24字符的sessionID老448字符验证字符串

刷新后,您将能够承担的认证用户的身份,而无需在技术上重新认证再次。 (再次假设您在存储在.ASPXAUTH加密认证字符串中的指定超时内执行此操作)

一个不错的blog后更详细地解释了问题。可能的解决方案是将.ASPXAUTH与ASP会话耦合。

0

如果用户与HTML登录URL的交互允许TSWPPserver建立用户身份,远程服务器应该生成一个cookie来标识用户并允许对服务器进行身份验证。 cookie的内容应该被签名和加密。包括签名和加密算法的这个cookie的具体实现取决于TSWPP服务器的实现,因为只需要服务器来解析cookie的内容。如果服务器实现了cookie,那么cookie必须以“application/x-msts-webfeed-login”的内容类型在HTTP有效载荷中返回。

http://msdn.microsoft.com/en-us/library/ee920427.aspx