【发布时间】:2010-09-30 05:21:30
【问题描述】:
在使用 ASP.Net 表单身份验证时,我遇到了 .ASPXAUTH cookie。我有几个问题:
- 这个 cookie 的用途是什么?
- 这个 cookie 的位置是什么?
【问题讨论】:
标签: asp.net cookies forms-authentication
在使用 ASP.Net 表单身份验证时,我遇到了 .ASPXAUTH cookie。我有几个问题:
【问题讨论】:
标签: asp.net cookies forms-authentication
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 有这些字段:
“ASPXAUTH 基本上是用来维护 ASP.NET 会话状态”的说法不正确。 ASP.NET 发出一个完全不同的 cookie,名为 ASP.NET_SessionId,用于跟踪会话状态。
【讨论】:
Application_PostAuthenticateRequest 中,Request.IsAuthenticated 为真,但 .ASPXAUTH 在我的 HttpContext.Current 中没有价值。请求.Cookies。我使用 sessionState。
实际上,.ASPXAUTH cookie 并不能准确地告诉您用户何时真正通过身份验证。当用户退出应用程序时,.ASPXAUTH cookie 将从浏览器中删除。但是,如果您在短时间内返回该站点(表单身份验证 cookie 超时),并使用以下内容编辑新的 ASP.NET_SessionId cookie:
刷新后,您将能够假定已通过身份验证的用户的身份,而无需再次从技术上重新进行身份验证。 (再次假设您在 .ASPXAUTH 加密身份验证字符串中存储的特定超时内执行此操作)
一个好的blog 帖子更详细地解释了这个问题。一种可能的解决方案是将 .ASPXAUTH 与 ASP 会话耦合。
【讨论】:
如果用户与 HTML 登录 URL 的交互允许 TSWPPserver 建立用户的身份,远程服务器应该生成一个 cookie 来识别用户并允许对服务器进行身份验证。 cookie 的内容应该被签名和加密。这个cookie的具体实现包括签名和加密算法依赖于TSWPP服务器的实现,因为只需要服务器解析cookie的内容。如果服务器实现了 cookie,则 cookie 必须在 HTTP 有效负载中返回,其 Content-Type 为“application/x-msts-webfeed-login”。
【讨论】:
在 Chrome 浏览器上 1.开发者工具-F12 2.找到应用程序选项卡 3.指向cookie的左窗格 如果登录应用程序中可用会话的 ASPXAUTH cookie,您会发现它
【讨论】: