环境是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用户的值。
我曾经想过,一旦用户通过身份验证(并获得授权),请求就会反映出身份验证;并且请求的用户/标识已正确设置。
对于为什么不是这种情况的任何想法?
谢谢,
尼
答案 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”]值。