【发布时间】:2013-03-06 20:58:08
【问题描述】:
我们的应用程序配置为使用表单身份验证,并且在大多数机器上运行良好。但是,我在我们的一个开发人员工作站上的开发环境存在问题。当我转到应用程序的其中一个 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> 元素。
【问题讨论】:
-
可以在您的 web.config 中设置
<authentication mode="Windows"/>吗? -
没有。在主 Web.config 中,
<authentication>元素设置为 Forms。该区域的 Web.config 中没有<authentication>元素。 -
也许不是页面本身,而是NTFS权限引起的js或css之类的资产?如果你按取消,你会得到 401 吗?你也试过 IIS express 吗?
-
@Ramunas,当我删除了包含应用程序开发文件的整个文件夹并尝试从源代码管理中重新检索它时,这就是我的想法。关于 401:是的,如果我按取消,我仍然会收到 401。 Re: IIS Express,我没试过。你能把它安装在 IIS 旁边吗?
-
@CharlieKilian 是的,IIS Express 可以与 IIS 一起安装。使用网络平台安装程序
标签: asp.net-mvc iis iis-7.5