【发布时间】:2011-09-28 22:36:11
【问题描述】:
我们在 ASP.NET 4.0 上有一个使用 MVC 3 的 ASP.NET 应用程序,它使用 Windows 身份验证。
当从 Visual Studio 2010 运行时,一切都按预期工作,但当推出到 IIS7 时,Windows 登录用户永远不会被填充(检查 User.Identity.Name)。也不会出现用户凭据的对话框提示。
web.config 设置:
<authentication mode="Windows" />
在 IIS 中,我可以看到 Windows 身份验证已启用,匿名也是如此(禁用匿名会导致 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 服务器上遇到问题(我现在一直禁用匿名)。所以我猜在堆栈的下方肯定有一些问题。有任何想法吗?我需要修复一些东西,因为我想它会不断弹出并咬我们。
更新 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 身份验证 > www.site.com/internal)和一个外部版本(使用表单身份验证 > www.site.com/external)。我仍然无法让身份验证作为子应用程序工作。我只是得到一个“错误代码:403 Forbidden”。
【问题讨论】:
-
你用什么浏览器测试?如果是 Firefox,您可能需要查看:addons.mozilla.org/en-US/firefox/addon/… Firefox 没有开箱即用地正确“启用”Windows 身份验证。
-
干杯大卫,但没有任何帮助。这个人似乎在让 Windows 身份验证工作时遇到问题,因为他错过了 web.config 设置(因此无法在 VS 或 IIS 中工作)。在 VS 中一切正常,只是 IIS 没有按预期运行。
-
谢谢克里斯。我已经在 IE、Firefox 和 Chrome 中尝试过。从 VS 运行时一切正常,但在 IIS 上运行时不行。我认为我在 IIS 上遗漏了一些东西,或者堆栈中存在问题,因为理论上它应该很容易设置。
-
@Gavin 你找到问题了吗?
标签: asp.net asp.net-mvc-3 iis-7 windows-authentication