什么是 ASPXAUTH cookie?

83

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

  • 这个cookie的目的是什么?
  • 这个cookie的位置在哪里?
3个回答

90

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发出了一个完全不同的名为ASP.NET_SessionId的cookie来跟踪会话状态。


2
在Firefox v8.0中,可以按照以下步骤找到Cookie:工具->页面信息->安全->查看Cookie。 - Anthony
在同一安全选项卡中,有一个“查看保存的密码”按钮,令我惊讶的是,我能够看到使用Firefox浏览器浏览各种网站时所有密码的明文。虽然浏览器必须将其存储在编码格式中,并通过解码显示供您参考,但我认为此选项确实是一种安全威胁。如果任何黑客可以采用相同的算法并使用JavaScript读取这些cookie,尽管泄漏该算法是一个遥远的可能性,因为它可能涉及某些仅浏览器代码知道的密钥。 - RBT
要获取用于存储ASP.NET会话ID的密钥名称,可以使用以下C#代码来访问HTTP请求的Cookie集合: var aspNetSessionState = new System.Web.Configuration.SessionStateSection(); var aspNetSessionCookieName = aspNetSessionState.CookieName; - RBT
Application_PostAuthenticateRequest中,_Request.IsAuthenticated_为真,但是我的HttpContext.Current.Request.Cookies中没有***.ASPXAUTH***的值。我使用sessionState。 - Kiquenet
1
我创建了一个MVC项目,运行它。注册账户,然后登录。在Chrome开发工具中检查cookies,发现有一个Aspnet.ApplicationCookie。然后在登录操作中添加了一行代码:FormsAuthentication.SetAuthCookie(model.Email, true);再次登录并检查Chrome开发工具中的cookies,这次显然是ASPXAuth。那么两者有什么区别呢? - user2156081

12

.ASPXAUTH cookie实际上并不能准确告诉您用户何时真正通过身份验证。 当用户退出应用程序时,.ASPXAUTH cookie将从浏览器中删除。 但是,如果在短时间内返回站点(表单身份验证cookie的超时时间),并使用以下方式编辑新的ASP.NET_SessionId cookie:

  • 将"name"字段从"ASP.NET_SessionId"更改为".ASPXAUTH"
  • 将"value"从24个字符的sessionID更改为旧的448个字符的验证字符串

刷新后,您将能够假设已经重新获得认证用户的身份,而不必再次进行技术认证。(假设您在.ASPXAUTH加密认证字符串中存储了特定的超时时间)

一篇博客文章详细解释了该问题。一个可能的解决方案是将.ASPXAUTH与ASP会话结合使用。


0
在Chrome浏览器中: 1.打开开发者工具-F12 2.定位到应用程序选项卡 3.在左侧窗格中找到Cookies 如果已登录应用程序的可用会话中有ASPXAUTH cookie,您将在其中找到它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接