我们在ASP.NET 4.0上使用MVC 3使用Windows身份验证。
从Visual Studio 2010运行时,一切都按预期工作,但是当推出到IIS7时,Windows登录用户永远不会被填充(检查User.Identity.Name)。也没有出现用户凭据的对话框提示。
web.config设置:
<authentication mode="Windows" />
在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>
任何想法可能是什么问题?
提前感谢任何建议。
更新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>
使用IIS7的UI配置身份验证并不能提供正确的结果。在病房之后,身份验证项目丢失(因为我猜IIS7假设它们被继承)或者它们的设置错误(windowsAuthentication似乎需要上面的提供程序配置才能正常工作)。
不幸的是,有问题的Web应用程序实际上是一个子应用程序,因为它有一个内部版本(使用Windows身份验证&gt; www.site.com/internal)和外部版本(使用表单身份验证&gt; www.site.com/external )。我仍然无法将身份验证作为子应用程序工作。我只得到一个“错误代码:403 Forbidden”。
答案 0 :(得分:3)
在这种情况下,它是Microsoft ISA Server问题。似乎请求正在通过ISA内部路由到Windows Authenticated站点,一旦ISA被删除,问题就消失了。
我不太了解ISA以及它如何路由请求,但我认为它必须从请求中删除一些重要信息,因为某些人已经配置了一些规则。
作为附注,如果它有助于诊断类似的设置:网络管理员告诉我内部流量没有通过ISA路由,但内部ping网站显示ISA实际上正在发挥作用。
答案 1 :(得分:0)
您提到禁用匿名访问在另一台服务器上运行,但在您的主服务器上遇到403错误。因此,我会检查运行您的站点的文件夹的基于文件的权限。在过去,我需要将\ Network Serivce帐户完全控制权授予网站文件夹和所有子文件夹,否则我将遇到403错误。检查正在运行的服务器上的文件权限,并查看服务器是否存在差异。
此外,如果这不是问题,我建议比较两台服务器之间的所有其他IIS设置,因为您知道它可以在一台服务器上工作,而不是另一台服务器。找出差异。