58

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

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

它到底在检查什么?如何将其设置为 true?

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

4

3 回答 3

68

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

以下答案所指的原始问题

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

谁能告诉我是什么将 IsAuthenticated 属性设置为 True - 什么构成登录。

丹尼尔肯特的回答:

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

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

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

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

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

于 2012-12-06T16:40:10.057 回答
8

Daniel Kent这里有一篇非常详细的帖子。(片段)

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

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

于 2010-02-04T16:31:31.500 回答
0

反编译HttpRequest IsAuthenticated,看起来是这样的

    public bool IsAuthenticated {
        get {
            return(_context.User != null
                    && _context.User.Identity != null
                    && _context.User.Identity.IsAuthenticated);
        }
    }

第 1373 行 https://referencesource.microsoft.com/#system.web/HttpRequest.cs

于 2021-09-01T02:56:40.800 回答