我们有一个内部网站,即 xxx.yyyy.com,用户通过输入“http”://xxx.yyy.com 来访问。
我们的问题始于迁移到运行在新的 2003 服务器上的 IIS 7 时。我们摆脱了单点登录代码,并实施了一个安全模型,在该模型中,我们捕获用户的域凭据,然后根据数据库对其进行身份验证。
为了将域凭据传递到我们的 ASP.NET 应用程序,我们进行了以下设置:
匿名身份验证:已禁用 ASP.NET 模拟:已启用 基本/摘要/表单身份验证:已禁用 Windows 身份验证:已启用
我们在 web.config 中允许“*”并拒绝“?”。
从任何客户端电脑浏览“http”://xxx.yyy.com 都会出现域登录提示,如果您输入正确的用户/密码,即可进入。
但是,远程访问服务器时浏览“http”://xxx.yyy.com 会导致 3 个域登录提示,并最终出现 401 错误 - 未经授权。
我们已经将此行为追溯到我们网站的问题,我们的网站上有页面使用 HttpRequest 调用同一服务器上的 URL 进行“屏幕抓取”。
当从任何其他客户端执行 HttpRequest 时,使用传递授权凭据的测试工具,一切都很好。因此,服务器上的内部 HttpRequest 调用会失败,就像尝试从远程会话中浏览该服务器的 URL 一样。
为什么访问服务器 xxx.yyy.com 上的“http”://xxx.yyy.com 会验证失败?
答案1
请参阅此 Microsoft 支持文章:
安装 Windows Server 2003 Service Pack 1 后,用户在 IIS 6.0 中访问网页或查询 Microsoft SQL Server 2000 时遇到身份验证问题
症状:
将运行 Microsoft Internet 信息服务 (IIS) 6.0 或 Microsoft SQL Server 2000 的基于 Microsoft Windows Server 2003 的计算机升级到 Windows Server 2003 Service Pack 1 (SP1)。
执行此操作后,用户在使用 Web 应用程序或使用查询数据库的程序时会遇到身份验证问题。例如,用户可能会遇到类似于以下症状之一的症状:
当用户尝试访问从后端数据库检索数据的网页时,会收到“访问被拒绝”错误消息。
用户无法连接到位于网络负载平衡 (NLB) 群集中的另一个数据库服务器。对数据库服务器的查询失败。用户遇到的症状可能因您的特定环境而异。