8

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

http://iweb.local/reports/

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

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/reportsWWW-Authenticate:NegotiateNTLM. 由此,我已经确认 IIS 正在引导浏览器提示输入密码。但我并没有更接近理解为什么。
  • 关闭 IIS,将万维网发布服务设置为手动启动类型,使其不会自动启动,然后重新启动计算机。然后我检查是否有任何请求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>元素。

4

3 回答 3

10

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

这将解决 IIS 身份验证问题

于 2014-09-09T05:32:20.350 回答
0

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

于 2013-04-07T11:26:18.743 回答
0

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

about:config "这可能会使您的保修失效!" 可能会出现警告页面。单击我会小心的,我保证!,继续到 about:config 页面。

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

于 2018-10-17T06:29:59.387 回答