4

我刚刚构建了一个基本的 ASP MVC 网站,用于在我们的 Intranet 上进行部署。它希望用户与 IIS 框在同一个域中,如果您不是经过身份验证的 Windows 用户,则不应获得访问权限。

我刚刚将它部署到在 Server 2003 R2 SP2 上运行的 IIS6。Web 应用程序配置有它自己的池和它自己的池用户帐户。Web 应用程序的 IIS 目录安全选项仅设置为“Windows 集成安全”,并且 web.config 文件具有:

<authentication mode="Windows" />

从 IIS6 服务器本身的远程桌面会话中,如果通过http://localhost/myapp访问,IE7 浏览器窗口可以成功验证和导航 Web 应用程序。

但是,同样从服务器,如果通过服务器的名称(即http://myserver/myapp)访问,则 IE7 会显示一个凭据对话框,在尝试输入正确凭据三次后最终返回“HTTP 错误 401.1 - 未经授权:访问被拒绝,原因无效的凭据”。

当工作站浏览到 Web 应用程序 url(自然使用服务器的名称而不是“localhost”)时,也会出现同样的问题。

IIS6 服务器是我们拥有的唯一域的成员,并且没有启用防火墙。

有什么我没有正确配置的东西吗?

谢谢,


迄今为止,我尝试了 Matt Ryan、Graphain 和 Mike Dimmick 的建议,但没有成功。我刚刚使用 Server 2003 DC 和单独的 server 2003 IIS6 服务器构建了一个虚拟机测试实验室,我能够复制该问题。

当我第一次尝试通过非本地主机 URL(即http://iis/myapp)访问该站点时,我在 IIS6 服务器的系统事件日志中看到了一个条目。FQDN url 也失败了。

来源:Kerberos,事件 ID:4
kerberos 客户端从服务器 host/iis.test.local 收到 KRB_AP_ERR_MODIFIED 错误。使用的目标名称是 HTTP/iis.test.local。这表明用于加密kerberos服务票据的密码与目标服务器上的密码不同。通常,这是由于目标领域 (TEST.LOCAL) 和客户端领域中的计算机帐户名称相同。

4

5 回答 5

7

经过广泛的谷歌搜索后,我设法在以下 MSDN 文章中找到了解决方案:
如何:为 ASP.NET 2.0 应用程序创建服务帐户

特别是附加注意事项部分,该部分描述了使用 Windows 支持工具中的 setspn 工具“为域帐户创建服务主体名称 (SPN)”:

setspn -A HTTP/myserver MYDOMAIN\MyPoolUser
setspn -A HTTP/myserver.fqdn.com MYDOMAIN\MyPoolUser

这解决了我在虚拟测试实验室和原始问题服务器上的问题。

文章中还有一个重要说明,即对自定义池用户使用 Windows 身份验证会将关联的 DNS 名称限制为仅由该池使用。也就是说,具有另一个身份的另一个池需要与不同的 DNS 名称相关联。

于 2008-09-25T08:53:08.907 回答
1

听起来像是 Windows Server 2003 SP1 的新 Loopback 检查安全功能。据我了解,旨在防止特定类型的拦截攻击。

来自http://support.microsoft.com/kb/896861

症状

当您使用完全限定域名 (FQDN) 或自定义主机标头浏览运行 Microsoft Internet 信息服务 (IIS) 5.1 或 IIS 6 的计算机上托管的本地网站时,您可能会收到一条错误消息,指出类似于以下内容: HTTP 401.1 - 未经授权:登录失败 当网站使用集成身份验证并且具有映射到本地环回地址的名称时,会出现此问题。

注意如果您尝试直接在服务器上浏览网站,您只会收到此错误消息。如果您从客户端计算机浏览该网站,该网站将按预期工作。

原因

如果您安装 Microsoft Windows XP Service Pack 2 (SP2) 或 Microsoft Windows Server 2003 Service Pack 1 (SP1),则会出现此问题。Windows XP SP2 和 Windows Server 2003 SP1 包括一个环回检查安全功能,旨在帮助防止对您的计算机进行反射攻击。因此,如果您使用的 FQDN 或自定义主机标头与本地计算机名称不匹配,则身份验证将失败。

解决方法

  • 方法一:禁用环回检查
  • 方法 2:指定主机名

有关详细信息,请参阅http://support.microsoft.com/kb/896861


编辑 - 刚刚注意到您说您也从客户端 PC 看到了这个......这更不寻常。但我仍然希望测试其中一种解决方法,看看它是否解决了问题(如果是,可能表明您的 DNS 配置有问题)。

于 2008-09-23T08:23:16.530 回答
0

在我看来,你做的一切都是对的。

我确定你是,但你确定你使用“域\用户”作为用户帐户,而不仅仅是“用户”吗?

于 2008-09-23T07:54:32.340 回答
0

IE7 仅在将服务器标识为位于 Intranet 上时才发送 Windows 凭据(NTLM、Kerberos)。IE7 还添加了 Intranet 区域锁定功能 - 如果您不在域中,默认情况下Intranet 区域中没有服务器。这样做是为了防止区域迁移攻击。

要更改此设置,请转到工具/Internet 选项、安全选项卡,然后单击本地 Intranet。然后,您可以手动添加应被视为 Intranet 的服务器,方法是单击“站点”按钮,然后单击“高级”,或者告诉 IE 不要自动检测您的 Intranet 并根据需要选择其他复选框。

于 2008-09-23T11:05:12.943 回答
0

我刚刚遇到了相反的问题——我的网站在外部进行身份验证,但不是在本地进行身份验证。

我将它与我们工作的站点进行了比较,不同之处在于未能通过身份验证的站点使用的是 Windows 身份验证。

但是,我使用的其他站点(这是一个开发服务器)往往具有基本身份验证。

不知道为什么,但这解决了它。

但是,同时我注意到“默认域”和“领域”设置。

我知道这不太可能,但这些可能有帮助吗?

于 2008-09-25T06:20:20.507 回答