IIS7上的ASP.NET身份验证问题 - 对于Windows身份验证,User.Identity.Name为空

Gav*_*vin 8 asp.net iis-7 windows-authentication asp.net-mvc-3

我们在ASP.NET 4.0上使用MVC 3使用Windows身份验证的ASP.NET应用程序.

从Visual Studio 2010运行时,一切都按预期工作,但当推出到IIS7时,Windows登录用户永远不会被填充(检查User.Identity.Name).也没有出现用户凭据的对话框提示.

web.config设置:

<authentication mode="Windows" />
Run Code Online (Sandbox Code Playgroud)

在IIS中,我可以看到启用了Windows身份验证,Anonymous也是如此(禁用匿名会导致403 Forbidden,并且不会显示任何内容).

我已尝试启用和禁用"内核模式身份验证"(useKernelMode ="true"),但这似乎没有任何区别.虽然我确实记得我们必须在不同服务器上的另一个站点上禁用此设置,以使身份验证正常工作(可能指向堆栈中的潜在问题?).

如果它有用,来自IIS的applicationHost.config:

<security>
  <authentication>
    <anonymousAuthentication enabled="true" />
    <digestAuthentication enabled="false" />
    <basicAuthentication enabled="false" />
    <windowsAuthentication enabled="true" useKernelMode="false">
      <providers>
        <clear />
        <add value="NTLM" />
      </providers>
    </windowsAuthentication>
  </authentication>
</security>
Run Code Online (Sandbox Code Playgroud)

任何想法可能是什么问题?

在此先感谢您的任何建议.

更新1

我设法找到另一个IIS7服务器进行测试,我发现如果我禁用匿名访问一切按预期工作.但是,即使我禁用匿名访问,我仍然在原始IIS7服务器上遇到问题(我现在禁用Anonymous).所以我猜想在堆栈中必须有一些问题.有任何想法吗?我需要修理的东西,因为它会不断弹出并咬我们想象.

更新2

如果我在问题IIS7框上启用摘要式身份验证,那么我将面临登录提示对话框的挑战,如果我提供合适的凭据,一切都按预期工作.但作为一个内部网络应用程序,用户已经登录到域,我们真的不想以这种方式挑战他们.凭据应该透明地传递,因为它在第二个IIS7框上工作.

更新3

一些进展......我发现如果Web应用程序位于根目录而不是子站点,那么直接编辑IIS7的applicationHost.config文件以提供以下身份验证设置,允许该站点按预期工作:

<authentication>
  <anonymousAuthentication enabled="false" />
  <windowsAuthentication enabled="true">
    <providers>
      <clear />
      <add value="NTLM" />
    </providers>
  </windowsAuthentication>
  <digestAuthentication enabled="false" />
</authentication>
Run Code Online (Sandbox Code Playgroud)

使用IIS7的UI配置身份验证并不能提供正确的结果.在病房之后缺少身份验证项目(因为我猜IIS7假定它们被继承)或者它们的设置错误(windowsAuthentication似乎需要上面的提供程序配置才能正常工作).

不幸的是,有问题的Web应用程序实际上是一个子应用程序,因为它有一个内部版本(使用Windows身份验证> www.site.com/internal)和一个外部版本(使用表单身份验证> www.site.com/external).我仍然无法将身份验证作为子应用程序工作.我只得到一个"错误代码:403 Forbidden".

Gav*_*vin 3

在本例中,这是 Microsoft ISA Server 问题。似乎请求是通过 ISA 内部路由到 Windows 身份验证站点的,一旦删除 ISA,问题就消失了。

我不太了解 ISA 以及它如何路由请求,但我认为它一定是从请求中删除了一些重要信息,因为有人配置了一些规则。

作为旁注,以防万一它有助于诊断类似的设置:网络管理人员告诉我,内部流量不是通过 ISA 路由的,但对网站进行内部 ping 操作表明 ISA 实际上正在发挥作用。