Request.IsAuthenticated如何运作?

Met*_*uru 52 c# asp.net httprequest

MSDN代码示例说明:以下代码示例使用IsAuthenticated属性来确定当前请求是否已经过身份验证.如果尚未通过身份验证,请求将重定向到另一个页面,用户可以在其中将凭据输入Web应用程序.这是应用程序的默认页面中使用的常用技术.

这很棒,但没有细节或任何东西......

它究竟在检查什么?如何将其设置为true?

加倍努力:我在哪里可以找到更详细的文档?

Oli*_*ver 60

感谢Google,我在他的回答中找到了@keyboardP的帖子的缓存版本.由于原始链接已被破坏(2012-12-06),我在此处发布该答案/帖子作为其他人的参考.

以下答案的原始问题是:

我有一个基于表单的应用程序,让我适合.我注意到,在IsAuthenticated属性为True的位置,它现在是假的,并且没有按预期工作.我想知道我的设置是否无效?

谁能告诉我什么将IsAuthenticated属性设置为True - 什么constitues登录.

Daniel Kent的回答:

Request.IsAuthenticated 不仅仅是表单认证 - 无论使用何种类型的身份验证(Windows,Passport,Forms或我们自己的自定义方案),它都是有效的

HttpRequest.IsAuthenticated当发出请求的用户已通过身份验证时,将为true.从本质上讲,此属性提供的信息与此相同Context.User.Identity.IsAuthenticated.

在请求开始时,Context.User.Idenity包含GenericIdentity 具有空用户名的a.IsAuthenticated此对象的属性将返回,false因此Request.IsAuthenticated将返回false.当身份验证模块处理Application_AuthenticateRequest事件并成功验证用户身份时,它会使用将从其属性返回的新对象替换GenericIdentityin .然后会回来.Context.User.IdentityIIdentitytrueIsAuthenticatedRequest.IsAuthenticatedtrue

在表单身份验证的情况下,表单身份验证模块使用身份验证cookie中包含的加密身份验证票证来验证用户.完成此操作后,它会将GenericIdentityin 替换为 从其属性返回Context.User.IdentityFormsIdentity对象.TrueIsAuthenticated

因此,设置IsAuthenticatedtrue登录实际上是不同的.正如Jeff所说,登录到表单身份验证时会生成身份验证票证并作为cookie发送到客户端.(RedirectFromLoginPageSetAuthCookie)我们所讨论的 IsAuthenticated是每个页面请求发生的身份验证.当用户输入凭证并发出票证时,会发生登录,每次请求都会进行身份验证.


key*_*rdP 8

丹尼尔肯特在这里有一篇非常详细的文章.(片段)

Request.IsAuthenticated不仅适用于表单身份验证 - 无论使用何种类型的身份验证(Windows,Passport,Forms或我们自己的自定义方案),它都是有效的

当发出请求的用户已经过身份验证时,HttpRequest.IsAuthenticated将为true.实质上,此属性提供与Context.User.Identity.IsAuthenticated相同的信息.

  • 遗憾的是,该链接已被破坏.我通过Google找到了一个缓存版本,并将其内容发布在不同的答案中,以便更好地进行格式化. (5认同)