Windows身份验证成功但IsAuthenticated == false

时间:2010-06-29 15:22:19

标签: asp.net authentication iis-7

环境是IIS 7集成管道,ASP.NET 4.0。我有一个.aspx页面配置没有匿名身份验证和Windows身份验证:

  <location path="auth/windows">
    <system.webServer>
      <security>
        <authentication>
          <anonymousAuthentication enabled="false" />
          <windowsAuthentication enabled="true" />
        </authentication>
      </security>
    </system.webServer>
  </location>

当我请求页面时,会发生正常的Windows身份验证(NTLM / Negotiate)质询响应,最终返回页面。

我有一个HttpModule,我在其中处理PostAuthorize事件。正如预期的那样,只有在质询 - 响应身份验证成功并且已授权访问页面后,才会引发此事件。

但是,Request.IsAuthenticated属性为false;和HttpContext.Current.User.Identity反映未经身份验证的用户(.Name返回空字符串)。有趣的是,Request.ServerVariables [“LOGON_USER”]确实返回经过身份验证的Windows用户的值。

我曾经想过,一旦用户通过身份验证(并获得授权),请求就会反映出身份验证;并且请求的用户/标识已正确设置。

对于为什么不是这种情况的任何想法?

谢谢,

2 个答案:

答案 0 :(得分:3)

Windows身份验证在IIS中启用,身份验证模式设置为web.config文件中的窗口。

 <authentication mode="Windows">     
    </authentication>

我的网站要求提供凭据,而且工作正常。但是在使用

进行检查时
HttpContext.User.Identity.Name

是空字符串 要么 HttpContext.User.Identity.IsAuthenticated是假的;

我使用了Request .ServerVariables["LOGON_USER"].Tostring();来登录用户凭据。

它对我有用,感谢发布足球。

答案 1 :(得分:2)

事实证明,当您在Web.config中启用了窗体身份验证时,Windows身份验证的本机处理会起作用。但是,Windows身份验证的托管部分 - 将经过身份验证的Windows用户与表示该用户的IIdentity派生对象相关联 - 只有在Web.config中启用了Windows身份验证时才会发生。看起来我将不得不依赖Request.ServerVariables [“LOGON_USER”]值。