为什么Windows身份验证/模拟在使用iis 7.5 / windows 7 /的asp.net应用程序上失败

时间:2010-06-10 14:39:39

标签: asp.net windows-7 impersonation windows-authentication iis-7.5

我正在解决为什么我无法通过为Windows身份验证和模拟配置的ASP.Net站点上的登录对话框。

我有一个ASP.Net 2.0应用程序,我正在尝试使用IIS 7.5在Windows 7上部署它。我创建了一个新站点,并将其绑定到localhost和一个完全限定的域名。 FQDN位于我的hosts文件中,并重定向到127.0.0.1

该站点也运行我创建的AppDomain,具有集成管道模式,并且流程模型标识设置为ApplicationPoolIdentity。

Web.config包括以下内容:

<trust level="High" />
<authentication mode="Windows" />
<authorization>
  <deny users="?"/>
</authorization>
<identity impersonate="true"/>`

站点目录上的ACL设置为Everyone(完全控制 - 用于测试)。 应用程序池虚拟帐户(Windows 7的东西)也设置为对站点的物理目录的完全控制。

IIS身份验证启用了ASP.Net模拟并启用了Windows身份验证。

当我以localhost身份连接到网站时,它允许我通过登录提示并且应用程序加载而不会发生任何事故。

当我作为此站点/ ip /端口的主机头绑定中设置的FQDN连接到站点时,我无法通过登录提示。单击“取消”会生成http 401.1错误页面。

为什么?

2 个答案:

答案 0 :(得分:7)

并且这个问题的答案将是一个称为身份验证环回检查的安全功能,在Windows 2003 SP1中引入,如下所示:http://support.microsoft.com/kb/926642

我正在尝试使用我的/ etc / hosts文件中定义的主机头连接到我的iis主机头实例,指向127.0.0.1,同时在运行iis的机器上登录 - 这是环回场景。

它会在各种情况下咬你,比如这个(http://blogs.bluethreadinc.com/thellebuyck/archive/2008/10/30/401.1-error-when-accessing-sharepoint-from-server.aspx)或谷歌这个受伤的世界(http://www.google.ca/search?q=authentication+loopback+check&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a

FIX涉及一些简单的注册工作:http://blogs.bluethreadinc.com/thellebuyck/archive/2008/10/30/401.1-error-when-accessing-sharepoint-from-server.aspx

我也不需要为我的情况启用模拟,所以我禁用了它,现在我可以在本地和远程使用我的伪造fqdn进行连接

答案 1 :(得分:7)

Velvet提供的网址已关闭。我在archive.org上找到了一个缓存版本:

” 从服务器访问SharePoint时出现错误401.1

过去我在设置SharePoint环境(内部开发用户和客户)时多次遇到过这个问题,所以我觉得是时候写一篇关于它的博客文章了。如果您在Windows Server 2003 SP1或更高版本上运行SharePoint Server 2007或WSS 3.0,则在尝试使用服务器本身的主机标头访问SharePoint网站时会遇到身份验证问题(即主机文件具有portal.mydomain.com指向至127.0.0.1)。此问题表现为Microsoft内置到Windows Server 2003 SP1及更高版本的环回安全检查的结果。环回检查的目的是消除拒绝服务攻击,但是它会导致从服务器本地访问SharePoint站点的问题。在典型的生产环境中,这通常不是问题,因为您很少从前端Web服务器本身访问SharePoint站点(除了中央管理员)。但是我确实有物理和虚拟开发环境,所有活动都是从服务器进行的,所以这可能会导致一些胃灼热,除非您之前已经解决了这个问题。您可以在KB926642&amp;中阅读详细的知识库文章。 KB896861。以下是如何解决问题的简要说明。我通常禁用环回检查,但不建议在生产服务器环境中使用。

方法1:禁用身份验证环回检查 通过将HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa注册表子项中的DisableLoopbackCheck注册表项设置为1,重新启用Windows Server 2003中存在的行为。要将DisableLoopbackCheck注册表项设置为1,请在客户端计算机上按照下列步骤操作:

  1. 单击“开始”,单击“运行”,键入regedit,然后单击“确定”。
  2. 找到并单击以下注册表子项:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
  3. 右键单击“Lsa”,指向“新建”,然后单击“DWORD值”。
  4. 键入DisableLoopbackCheck,然后按Enter。
  5. 右键单击DisableLoopbackCheck,然后单击“修改”。
  6. 在“数值数据”框中,键入1,然后单击“确定”。
  7. 退出注册表编辑器。
  8. 重新启动计算机。 注意您必须重新启动服务器才能使此更改生效。默认情况下,在Windows Server 2003 SP1中打开环回检查功能,并将DisableLoopbackCheck注册表项设置为0(零)。禁用身份验证环回检查时,安全性会降低,并且会打开Windows Server 2003服务器,以便在NTLM上进行中间人(MITM)攻击。
  9. 方法2:创建可在NTLM身份验证请求中引用的本地安全机构主机名 为此,请对客户端计算机上的所有节点执行以下步骤:

    1. 单击“开始”,单击“运行”,键入regedit,然后单击“确定”。
    2. 找到并单击以下注册表子项:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0
    3. 右键单击“MSV1_0”,指向“新建”,然后单击“多字符串值”。
    4. 在“名称”列中,键入BackConnectionHostNames,然后按Enter。
    5. 右键单击BackConnectionHostNames,然后单击“修改”。
    6. 在“数值数据”框中,键入用于计算机上本地共享的CNAME或DNS别名,然后单击“确定”。
    7. 注意在单独的行中键入每个主机名。

      注意如果BackConnectionHostNames注册表项作为REG_DWORD类型存在,则必须删除BackConnectionHostNames注册表项。 7.退出注册表编辑器,然后重新启动计算机 “

      来自:http://blogs.bluethreadinc.com/thellebuyck/archive/2008/10/30/401.1-error-when-accessing-sharepoint-from-server.aspx于2009年6月5日