【问题标题】:IIS 7.5 is prompting for a username and passwordIIS 7.5 提示输入用户名和密码
【发布时间】:2013-03-06 20:58:08
【问题描述】:

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

http://iweb.local/reports/

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 的两个选项: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 文件中没有 &lt;authentication&gt; 元素。

【问题讨论】:

  • 可以在您的 web.config 中设置 &lt;authentication mode="Windows"/&gt; 吗?
  • 没有。在主 Web.config 中,&lt;authentication&gt; 元素设置为 Forms。该区域的 Web.config 中没有 &lt;authentication&gt; 元素。
  • 也许不是页面本身,而是NTFS权限引起的js或css之类的资产?如果你按取消,你会得到 401 吗?你也试过 IIS express 吗?
  • @Ramunas,当我删除了包含应用程序开发文件的整个文件夹并尝试从源代码管理中重新检索它时,这就是我的想法。关于 401:是的,如果我按取消,我仍然会收到 401。 Re: IIS Express,我没试过。你能把它安装在 IIS 旁边吗?
  • @CharlieKilian 是的,IIS Express 可以与 IIS 一起安装。使用网络平台安装程序

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


【解决方案1】:

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

这将解决 IIS 身份验证问题

【讨论】:

  • 只想指出“报表管理器 URL”设置与“Web 服务 URL”设置不同。我没有注意到有 2 个 URL 设置,并且在我更改了错误的设置后它没有解决问题时感到困惑。
  • 这可能会有所帮助(关闭 Reporting Services):msdn.microsoft.com/en-us/library/…
  • 这把我吓坏了,还以为是权限问题。谢谢!
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-30
      • 2014-01-06
      • 2012-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-10
      相关资源
      最近更新 更多