【问题标题】:Where is HttpContext.User property set initially?HttpContext.User 属性最初设置在哪里?
【发布时间】:2015-06-13 19:42:31
【问题描述】:

HttpContext 有一个处理 IPrincipal 类型的 User 属性。 从 MS 的文档中,我知道该属性可能由 Http 模块设置,例如 WindowsAuthenticationModuleFormsAuthenticationModule 但是,例如,这是 WindowsAuthenticationModule 的代码:

 WindowsPrincipal user = context.User as WindowsPrincipal;
        if (user != null) {/* code... */}

有趣的是,如果条件为假(用户为 null 或用户具有其他类型,而不是 WindowsPrincipal)而不是 WindowsAuthenticationModule 返回控制(用于 IIS 的集成模式管道)。 我有以下问题:

  1. 在 IIS 对客户端进行身份验证后(作为匿名用户或经过身份验证的用户,正如它所配置的那样),它将向 ASP.NET 传递一个安全令牌。在任何情况下,我们的应用程序都会将此令牌包装在 WindowsIdentity и WindowsPrincipal 对象中。它发生在身份验证模块开始实施之前。 这是真的吗?

  2. 如果1为真,HttpContext.User属性最初设置在哪里?

  3. 如果1为真,当HttpContext.User为空时?我想如果我配置 Web.config 可能是这样:

我说的对吗?

【问题讨论】:

    标签: c# asp.net asp.net-mvc authentication


    【解决方案1】:

    在大多数情况下,HttpContext.User 是在用户通过身份验证(非匿名)时设置的。我知道在 FormsAuthentication 中,这发生在 FormsAuthentication.SetAuthCookie 上,并且当客户端注销并清除 cookie 时,HttpContext.User 设置为 null

    【讨论】: