我们的应用程序配置为使用表单身份验证,并且在大多数机器上运行良好。但是,我在我们的一个开发人员工作站上的开发环境存在问题。当我转到应用程序的 URL 之一时,如下所示:
IIS 提示我输入密码,如下所示:
(该名称iweb.local
在 hosts 文件中设置为指向 127.0.0.1。本质上它是 localhost 的别名。我们将 IIS 站点配置为使用主机标头,因此我们将来可能支持多个应用程序。)
如果我访问应用程序中的大多数其他 URL,例如http://iweb.local/ ,系统不会提示我输入密码。并且在任何其他开发人员机器上使用完全相同的代码库时,都不会提示我输入密码。只有这台机器有问题。这使我有理由相信这不是编码问题。
我尝试过的事情:
- 使用不同的 Web 浏览器进行测试。在出现问题的机器上,无论我使用什么浏览器都会出现问题。我在 FireFox 和 IE9 中得到相同的提示。
- 在其他开发人员机器上进行测试。这些问题不会发生。它只发生在单个开发人员框中。
- 将代码和资产从 复制
~/Areas/Reports
到~/Areas/ReportsTest
中,并进行适当的重构,然后加载http://iweb.local/reportstest/
. 这样可行; 浏览器不再提示输入用户名和密码。但是,更改 URL 不是我们的应用程序的选项。 - 检查 IIS 身份验证配置。启用匿名身份验证和表单身份验证。其他一切都被禁用。这在所有开发人员机器上都是相同的,包括可以工作的机器和不能工作的机器。
- 检查事件日志。IIS 没有将任何内容记录到事件日志中。
- 检查 IIS 日志。日志包含成功请求的条目(例如当我打开时
http://iweb.local
),但它不会记录任何提示用户输入密码的请求的任何内容。 - 使用 FireBug 检查请求和响应标头。对于对任一 URL 的请求,请求标头似乎相同。的响应标头
http://iweb.local/reports
有WWW-Authenticate
:Negotiate
和NTLM
. 由此,我已经确认 IIS 正在引导浏览器提示输入密码。但我并没有更接近理解为什么。 - 关闭 IIS,将万维网发布服务设置为手动启动类型,使其不会自动启动,然后重新启动计算机。然后我检查是否有任何请求
http://iweb.local
或http://iweb.local/reports/
正在响应请求。两者都不是,确认是 IIS 正在处理请求。 - 停止 IIS,从开发人员的硬盘中删除整个项目,然后从源代码管理中检索它。我的想法是,这可能是其中一个文件夹的权限问题(尽管我不明白这是怎么回事,因为这是一个 MVC 应用程序)并且通过此过程将确保所有文件夹都具有正确的权限。但这并没有改变什么。
- 完全卸载IIS,重启电脑,重新安装IIS。这也不起作用。
我没主意了。我在这个开发人员框中找不到与其他开发人员框配置不同的任何内容。
所以:有没有人知道一种方法可以启用更深层次的日志记录或跟踪以找出 IIS 要求输入密码的原因?谁能想到任何可能导致我尚未寻找的原因?
这是一个在 64 位环境中的 IIS 7.5 上运行的 ASP.NET MVC 3 应用程序。URL的reports
一部分被配置为 MVC 区域。
更新
在我的 Web.config 文件中,这是在违规机器上设置身份验证模式的方式。
<authentication mode="Forms">
<forms loginUrl="~/account/login" timeout="2880" />
</authentication>
报告区域的 Web.config 文件中没有<authentication>
元素。