【问题标题】:ASP MVC Preview 5 and IIS 6 Windows AuthenticationASP MVC Preview 5 和 IIS 6 Windows 身份验证
【发布时间】:2010-09-12 06:51:47
【问题描述】:

我刚刚构建了一个基本的 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) 和客户端领域中的计算机帐户名称相同。

【问题讨论】:

  • 我假设您将站点的主机标头设置为 localhost 和 myserver?
  • 您可能希望将您的 web.config 代码放在自己的行中,并带有 4 个空格缩进以便它显示出来。也很高兴看到一位阿德莱德程序员使用 ASP.NET MVC。
  • 还有一件事:您是否将任何读/写/执行安全设置应用于托管您的应用程序的文件夹(即 c:\inetpub\appdir)?
  • 嘿,我现在遇到了与网站相反的问题——在外部进行身份验证,但不是在本地进行身份验证。如果我发现任何东西,我会通知你
  • 仅供参考:设置虚拟实验室的速度出奇的快。我使用 MS Virtual PC 并为 DC 和 IIS 服务器从头安装了 Windows Server 2003,并在短短 2 小时内重现了问题。

标签: asp.net-mvc authentication iis-6


【解决方案1】:

经过大量谷歌搜索后,我设法在以下 MSDN 文章中找到了解决方案:
How To: Create a Service Account for an ASP.NET 2.0 Application

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

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

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

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

【讨论】:

    【解决方案2】:

    听起来像 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 配置存在问题)。

    【讨论】:

    • 我现在尝试了 KB896861 中的解决方法,但没有成功。我在事件日志中看到了与 Kerberos 相关的错误,因此我正在调查这些错误。
    【解决方案3】:

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

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

    【讨论】:

    • 是的,使用 DOMAIN\user 并尝试了 FQDN\user 和 user@FQDN。
    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

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

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

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

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

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

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

      【讨论】:

      • 我很早就使用了默认域和领域设置,但没有运气。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-05
      • 2016-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-03
      • 2016-06-07
      相关资源
      最近更新 更多