了解窗体的身份验证票证和 Cookie


ASP.NET 支持语音列


了解窗体的身份验证票证和 Cookie

若要自定义此列与您的需求,我们希望邀请您提交您感兴趣的主题和您感兴趣的在将来解决知识文库文章和 Support Voice 专栏您想要查看的问题的主题的想法。您可以提交您的想法和反馈使用已对它提出的形式。还有一个链接到窗体中此列的底部。

简介

欢迎访问 Microsoft ASP.NET 支持语音列 !我将 Nilay B.Shah 与 ASP.NET 开发人员支持团队。我一直在使用 ASP.NET 支持一个半年以上。窗体身份验证实际上是一种很酷的身份验证功能。本文介绍了一些用户发现使用窗体身份验证,如 forms 身份验证票证和窗体身份验证 cookie 和其相关设置的关系令人困惑的问题。我想要感谢 Jerry Orman,技术负责人的 ASP.NET 支持团队,他令人难以置信的帮助 !

因为它们密切相关,人们有时会想知道有关窗体的身份验证"票"和"cookie"。我已经碰到过这样的问题︰ 任何人都可以解释在 cookie 过期票证到期日期之间的差异吗?Cookie 过期后,用户将被重定向到登录页。票证过期时,会发生什么情况?它也会使过期的 cookie?SlidingUpdate 实际上更新内容?

我将着重在这篇文章,回答下面问题的窗体身份验证这两个方面︰
  • Forms 身份验证票证和 Forms 身份验证 cookie 是什么?它们是如何相关的?
  • 在 Forms 身份验证票证的角色是什么?
  • Cookie 的过期时间和票证到期日期相关联的方式?
  • 如何在 forms 身份验证票证的上下文中的滑动过期工作和窗体身份验证 cookie?
  • 其中设置的窗体身份验证 cookie 和 forms 身份验证票证超时属性?
  • 方案问题︰ forms 身份验证可能会在配置文件中设置的超时属性值之前的超时

Forms 身份验证票证和 Forms 身份验证 cookie 是什么?它们是如何相关的?

窗体身份验证 cookie 的 forms 身份验证票证的容器别无良策。票据作为随每个请求的窗体身份验证 cookie 值传递和 forms 身份验证,在服务器上,用于经过身份验证的用户标识。

但是,如果我们选择使用无 cookie 的 forms 身份验证,该票证将以加密格式的 URL 中传递。使用无 cookie 的窗体身份验证是因为有时客户端浏览器禁止 cookie。在 Microsoft.NET Framework 2.0 中引入此功能。

有关详细信息,请访问下面的 Microsoft 开发人员网络 (MSDN) Web 站点︰

在 Forms 身份验证票证的角色是什么?

Forms 身份验证票证用于通知您的身份的 ASP.NET 应用程序。因此,票证是安全性的构建基块的窗体身份验证。

票证被加密,并使用服务器的 Machine.config 文件< machineKey >配置元素签名。ASP.NET 2.0 使用decryptionKey< machineKey >元素的新解密特性进行加密的 forms 身份验证票证。解密属性允许您指定要使用的加密算法。ASP.NET 1.1 和 1.0 使用 3DES 加密不可配置。篡改票值已确定无法解密票证在服务器上。结果是,用户被重定向到登录页。


如果在 Web 场中部署应用程序时,必须确保每个服务器上的配置文件共享在< machineKey >标记中,分别使用的哈希算法和解密票证的validationKeydecryptionKey属性的值相同。因为不能保证哪一台服务器将处理后续请求时,必须执行此操作。FormsAuthenticationTicket加密和 Web 场部署注意事项的更多信息,请访问下面的 MSDN 网站︰可以在下面的 Microsoft 知识库文章中找到演练一下要手动生成密钥的方法︰
312906如何使用窗体身份验证中使用 Visual C#.NET 创建密钥

313091如何使用窗体身份验证中使用 Visual Basic.NET 创建密钥

通过使用FormsAuthenticationTicket类,可以手动生成窗体身份验证票证。有关详细信息,请访问下面的 MSDN 网站︰

Cookie 的过期时间和票证到期日期相关联的方式?

对于非永久性的 cookie,如果票证已过期,cookie 也将到期,并且用户将被重定向到登录页。在另一面,如果票证 cookie 存储在客户端中,位置被标记为永久性的浏览器可以使用相同的身份验证 cookie 来登录到 Web 站点的任何时间。但是,我们可以使用FormsAuthentication.SignOut方法来删除持久性或非永久性的 cookie 明确。

FormsAuthentication.SignOut方法的更多信息,请访问下面的 MSDN 网站︰使用无 cookie 的窗体身份验证,如果浏览器处于关闭状态,该票证将丢失下, 一个请求将生成新的票证。

如何在 forms 身份验证票证的上下文中的滑动过期工作和窗体身份验证 cookie?

可调过期的工作方式完全相同的方式 !

让我们以一个示例︰ 如果在 5:00 访问登录页 00:00:00 PM,它的过期时间,在 5:10 00:00:00超时属性是否 10 和slidingExpiration属性设置为 TRUE。现在,如果在 5:05 再次浏览任何网页 00:00:00 PM,cookie 和票证超时将被重新设置为 5:15 00:00:00。

注意:如果一半到期时间过去之前访问该 Web 页时,将不重置票证过期时间。前景色的示例中,如果任何 Web 页被再次访问 5:04 00:00:00 PM,将不重置的 cookie 和票证超时时间。

有关详细信息,请访问下面的 MSDN 网站︰

其中可以设置表单身份验证 cookie 和 forms 身份验证票证超时值?

在 Web.config 文件或中的< 窗体 >标记 Machine.config 文件中是唯一可以进行的设置。此更改会确定窗体身份验证的上下文中的票证或 cookie 超时时间,除非手动生成该票证。

<!--forms Attributes: 
name="[cookie name]" - Sets the name of the cookie used for Forms Authentication.
loginUrl="[url]" - Sets the URL to redirect client to for authentication.
protection="[All|None|Encryption|Validation]" - Sets the protection mode for data in cookie.
timeout="[minutes]" - Sets the duration of time for cookie to be valid (reset on each request).
path="/" - Sets the path for the cookie.
requireSSL="[true|false]" - Should the forms authentication cookie be sent only over SSL?
slidingExpiration="[true|false]" - Should the forms authentication cookie and ticket be reissued if they are about to expire?
-->
有关详细信息,请访问下面的 MSDN 网站︰如果使用FormsAuthenticationTicket类手动生成该票证,则可以通过过期属性设置超时值。此值将重写配置文件中指定的超时属性值。

有关FormsAuthenticationTicket成员的详细信息,请访问下面的 MSDN 网站︰

方案问题︰ forms 身份验证可能会在配置文件中设置的超时属性值之前的超时

如果手动生成的窗体身份验证票证,该票证超时属性将覆盖配置文件中设置的值。因此,如果配置文件中的值小于此值,则窗体身份验证票将到期之前配置文件超时特性值,反之亦然。例如,我们假设在 Web.config 文件中的< 窗体 >超时属性设置为 30,和票据的到期值设置为 20 分钟。在这种情况下,forms 身份验证票证有效期 20 分钟后,用户必须登录,后。

相关的链接

910439解决窗体身份验证

891032故障诊断 ASP.NET

301240如何通过使用 C#.NET ASP.NET 应用程序中实现基于窗体的身份验证

308157如何通过使用 Visual Basic.NET ASP.NET 应用程序中实现基于窗体的身份验证

我希望能找到此信息有助于减轻某些涉及使用 ASP.NET forms 身份验证票证和 cookie 的混乱。请记住,您是 Support Voice 专栏 !一直以来,尽情地提交有关主题的意见要在将来解决列,或者在 Microsoft 知识库文章中使用
窗体已对其询问