在MVC 4中使用Windows身份验证时,ServerVariables [" REMOTE_USER"]为空

时间:2014-03-20 04:23:47

标签: asp.net-mvc-4 iis-7.5

我有一个ASP MVC 4应用程序,它使用第三方HTTP模块来提高安全性。使用Windows身份验证时,它会尝试自动登录,如果失败,则会将您重定向到自定义登录页面。

以前的ASP Webforms和MVC 2-4应用程序一直运行良好,但是对于这个特定的应用程序,它无法自动登录用户。

应用程序的虚拟目录禁用所有身份验证模式(匿名等),但启用了Windows身份验证。我还检查了提供商 Negotiate NTLM

web.config是一个非常标准的从MVC模板获得的,我尝试了对system.websystem.webServer的各种web.config更改(以及更改应用程序池的管道模式)如:

<system.web>
   <authentication mode="Windows"/>

并添加

<authorization>
  <allow users="*" />
  <deny users="?" />
</authorization>

但在每种情况下,安全模块都无法获取用户名。该模块尝试通过HttpContext.Current.Request.ServerVariables["REMOTE_USER"]获取用户名,但我也修改了它以使用HttpContext.Current.User.Identity.Name,在这两种情况下它都是空白的。

由于此模块已经运行多年并仍可用于同一服务器上的其他应用程序,因此我认为它是IIS或Web.config配置问题。我尝试过创建一个新的虚拟目录,它也有同样的错误。

是否需要任何其他配置或其他原因不适用于此特定应用程序?

1 个答案:

答案 0 :(得分:0)

解决方案是将以下内容添加到我的web.config

中的appSetting部分
    <add key="autoFormsAuthentication" value="false" />
    <add key="enableSimpleMembership" value="false"/>
  </appSettings>

这是我第一次需要添加这样的东西,所以我不确定为什么有必要,但确实有效。