Request.IsAuthenticated如何工作?
MSDN代码示例说明:以下代码示例使用IsAuthenticated属性来确定当前请求是否已通过身份validation。 如果没有通过身份validation,请求将被redirect到另一个页面,用户可以在其中input凭据到Web应用程序中。 这是在应用程序的默认页面中使用的常用技术。
这是伟大的,但没有细节或任何东西…
究竟是什么检查? 我如何设置它为真?
多走一步:在哪里可以find更详细的文档?
感谢Google,我发现@keyboardP的caching版本是在他的回答中引用的。 由于原来的链接被破坏,我在这里张贴这个答案/张贴作为别人的参考(2012-12-06)。
原始问题 ,下面的答案是指:
我有一个基于表单的应用程序,让我适合。 我注意到,在一个IsAuthenticated属性为True的地方,现在是错误的,而且没有按预期工作。 我想知道如果我有一个无效的设置?
任何人都可以告诉我什么设置IsAuthenticated属性为真 – 什么样的标准login。
通过丹尼尔肯特:
Request.IsAuthenticated
不仅适用于表单身份authentication – 无论使用何种types的authentication(Windows,Passport,Forms或我们自己的定制scheme)
HttpRequest.IsAuthenticated
将在请求的用户进行身份validation时为true。 本质上,这个属性提供了与Context.User.Identity.IsAuthenticated
相同的信息。
在请求开始时, Context.User.Idenity
包含一个带有空用户名的GenericIdentity
。 此对象的IsAuthenticated
属性将返回false
因此Request.IsAuthenticated
将为false
。 当身份validation模块处理Application_AuthenticateRequest
事件并成功validation用户时,它将使用新的IIdentity
对象replaceContext.User.Identity
的GenericIdentity
,该对象将从其IsAuthenticated
属性返回true
。 Request.IsAuthenticated
将返回true
。
在表单身份validation的情况下,表单身份validation模块使用身份validationCookie中包含的encryption的身份validation票证来validation用户身份。 一旦完成了这个操作,它将用一个从其IsAuthenticated
属性返回True
的FormsIdentity
对象replaceContext.User.Identity
的GenericIdentity
。
所以,将IsAuthenticated
设置为true
实际上与login不同。正如Jeff所说,当身份validation票据生成并作为cookie发送到客户端时,login到表单身份validation会发生。 ( RedirectFromLoginPage
或SetAuthCookie
)我们正在谈论与IsAuthenticated
是validation每个页面请求发生。 login发生在用户input凭证并发出票据时,每次请求都会进行身份validation。
丹尼尔·肯特在这里有一个非常详细的post。 (片段)
Request.IsAuthenticated不仅适用于表单身份authentication – 无论使用何种types的authentication(Windows,Passport,Forms或我们自己的定制scheme)
HttpRequest.IsAuthenticated将在请求的用户进行身份validation时为true。 本质上,这个属性提供了与Context.User.Identity.IsAuthenticated相同的信息。