asp.net-mvc - 谁设置了 HttpContext.User.Identity 的 IsAuthenticated 属性

标签 asp.net-mvc authentication forms-authentication

本代码来自asp.net mvc RTM源码

谁设置了 HttpContext.User.Identity 的 IsAuthenticated 属性?

   protected virtual bool AuthorizeCore(HttpContextBase httpContext) {
        if (httpContext == null) {
            throw new ArgumentNullException("httpContext");
        }

        IPrincipal user = httpContext.User;
        if (!user.Identity.IsAuthenticated) {
            return false;
        }
    }

IsAuthenticated 属性是否通过调用方法设置(asp.net mvc 4.0 示例项目):
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);

当我调试 的代码时登录 上述 FormsAuth... 方法调用后的 asp.net mvc 4.0 示例项目的方法。的执行
User.Identity.IsAuthenticated

仍然返回 FALSE。只有当我调试 注销 方法
User.Identity.IsAuthenticated

说真的。那么谁将此属性设置为 TRUE 和 WHEN 呢?

更新 :

这大约是 表格 验证!

我现在确实调试了 asp.net mvc 示例项目的 LogOn 方法,在返回 LogOn 操作后,我已覆盖的 AuthorizeCore 方法被调用,然后 IsAuthenticated 属性为 TRUE!

TRUE 的设置是否取决于 ModelState.Value.Error 集合?

如果错误集合中的 count == 0,则 IsAuthenticated 为 TRUE
否则 IsAuthenticated 为 FALSE

你能证实吗?

最佳答案

此属性由表单例份验证模块通过读取和解析来自 的表单例份验证 cookie 来设置。请求 .我用粗体表示了请求,因为我怀疑这就是你观察这种行为的原因。让我解释。当您调用 FormsAuthentication.SetAuthCookie成功验证后,您将验证 cookie 添加到 回复 .此 cookie 将存储在客户端浏览器上,并将在 上发送。后续要求。因此,只有在后续请求中,用户才会被视为已通过身份验证。因此,您需要在调用 SetAuthCookie 方法后始终进行重定向。在调用此方法的请求中,您已经知道用户是否提供了正确的凭据,因此您无需检查 IsAuthenticated 属性。

关于asp.net-mvc - 谁设置了 HttpContext.User.Identity 的 IsAuthenticated 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8660539/

相关文章:

asp.net - 如何在 Asp.Net Membership Provider 中处理 "Remember me"

c# - ASP.NET MVC,用于将验证消息从服务层验证传输到 View 模型的解决方案

asp.net-mvc - ASP.NET MVC 区域路由

javascript - 启用被 JavaScript 禁用的按钮

java - java 和 .net 应用程序之间的身份验证

c# - 使用 FormsAuthentication.SetAuthCookie 存储更多信息

asp.net-mvc - 调试时编辑 .NET Core cs 文件

java - 使用 JDBCRealm 保护 REST Web 服务?

google-chrome - 主机名/IP 地址发生变化的站点上的 FIDO U2F

c# - ASP.NET MVC : Relationship between MembershipUser, 标识、MembershipProvider 和主体