IIS 7.5提示输入用户名和密码

时间:2013-03-06 20:58:09

标签: asp.net-mvc iis iis-7.5

我们的应用程序配置为使用表单身份验证,并且在大多数计算机上它运行良好。但是,我在我们的一个开发人员工作站上遇到了开发环境问题。当我转到应用程序的其中一个URL时,如下所示:

http://iweb.local/reports/

IIS提示我输入密码,如下所示:

IIS prompts for a username and password

(在hosts文件中设置名称iweb.local以指向127.0.0.1。本质上它是localhost的别名。我们将IIS站点配置为使用主机头,以便我们可以将来支持多个应用程序。)

如果我访问应用程序中的大多数其他网址,例如http://iweb.local/,则系统不会提示我输入密码。并且在任何其他开发人员计算机上使用完全相同的代码库时,我都不会被提示输入密码。只有这台机器才有问题。这使我有理由相信这不是编码的问题。

我尝试过的事情:

  • 使用其他网络浏览器进行测试。在出现问题的机器上,无论我使用什么浏览器,都会出现问题。我在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的两个选项:NegotiateNTLM。由此,我确认IIS正在指示浏览器提示输入密码。但我不太了解原因。
  • 关闭IIS,将World Wide Web Publishing服务设置为具有手动启动类型,以便它不会自动启动并重新启动计算机。然后我检查了http://iweb.localhttp://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>元素。

3 个答案:

答案 0 :(得分:11)

如果服务器上安装了名为“Reports”且SQL Server Reporting Services的应用程序中的文件夹,则名为“Reports”的Reporting Services Virtual Directory文件夹将与应用程序“Reports”文件夹冲突。要修复此打开的Reporting Services配置管理器(开始 - >所有程序 - > MS SQL Server->配置工具 - > Reporting Services配置管理器),请将虚拟目录从“报告”更改为任何其他名称(“TestReports” “)在左侧菜单中的”报表管理器URL“下。

这将解决IIS身份验证问题

答案 1 :(得分:0)

使用IE9中的fiddler或dev工具来查看请求。然后,这将显示标题中的内容导致弹出窗口。它可能是基本身份验证或NT身份验证,浏览器无法满足请求。由于它已本地化到一台计算机,因此请检查IIS是否仅配置为匿名&amp;检查所请求文件的权限。

答案 2 :(得分:0)

在位置栏中,键入about:config,然后按Enter。

about:config“这可能会使保修无效!”警告页面可能会出现。单击,我保证,我会小心的,继续进入about:config页面。

在about:config页面中,搜索首选项network.automatic-ntlm-auth.trusted-uris,然后双击它。 在出现的提示中,键入要允许的服务器列表,以逗号和空格分隔。例如,如果要允许http://myinternalserverhttp://anotherinternalserver,则可以键入myinternalserver,另一个internalserver。 按确定。