Windows身份验证无法在本地IIS 7.5上运行.错误401.1

Pet*_*iFi 42 c# windows asp.net iis windows-authentication

我最近有一个令人讨厌的问题,让Windows身份验证在IIS 7.5(Windows 7 Pro)的本地实例上运行到ASP.net 4.0站点.我按照基本步骤.

IIS身份验证

  • 禁用匿名身份验证
  • 启用Windows身份验证

编辑web.config

<authentication mode="Windows" />
Run Code Online (Sandbox Code Playgroud)

这在启用Windows身份验证方面做得很好但是每次登录尝试都被拒绝并最终返回401.1错误.这就是问题的起源.似乎有很多原因可以在Web上详细记录,包括Stack Overflow.

我试过了:

  • 编辑IIS身份验证Windows身份验证的"高级设置"以禁用扩展保护和内核模式身份验证
  • 编辑IIS身份验证'提供程序'以将NTLM移动到Negotiate之上.
  • 编辑IIS .NET授权规则以明确允许用户(以及各种其他组合).
  • 各种IIS命令行脚本和调整.
  • web.config文件中的各种配置调整.
  • 甚至一些文件系统权限调整.

但一切都无济于事,可怕的401.1仍然存在.

这确实是"看不见树木"的案例.我设法找到的所有解决方案(如果你愿意,都称之为糟糕的搜索参数)都没有为我工作,所以我认为值得发布这个问题,希望能提供一个明确的答案,对于遇到同样问题的人来说更容易找到.

Pet*_*iFi 73

这里的问题是Windows的现代版本(Windows XP SP2,Windows Server 2003 SP1及更高版本)包含一个环回检查安全功能,旨在帮助防止对您的计算机进行反射攻击.因此,如果您使用的FQDN或自定义主机标头与本地计算机名称不匹配,则身份验证将失败.

这可以通过显式指定主机名或禁用环回检查来解决.显然,前者是更受控制的方法.

  1. 将DisableStrictNameChecking注册表项设置为1.请参阅:281308 (注意:对于Windows Server 2008/Vista及更高版本,这不应该是这样)
  2. 在注册表编辑器中,找到并单击以下注册表项:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0
  3. 右键单击"MSV1_0",指向"新建",然后单击"多字符串值".
  4. 键入BackConnectionHostNames,然后按ENTER键.
  5. 右键单击"BackConnectionHostNames",然后单击"修改".
  6. 在"数值数据"框中,键入本地计算机上站点的主机名或主机名,然后单击"确定".
  7. 退出注册表编辑器,然后重新启动IISAdmin服务.

有关如何做到这一点的详细信息可以在MSDN:896861上找到

希望这有助于某人.如果您有任何其他建议或改进,请添加.

  • 解决方案适用于添加DNS条目的情况,并且可以使用FQDN从工作站访问该站点,但是当您添加到DNS的主机名不同于服务器时,您无法从服务器本身访问该站点.服务器的机器名称.很好地参考了MS支持文章.在我的知识库中归档这个,因为我相信我会再次需要它.此外,请注意 - MS文章281308说在编辑注册表后重新启动,但在完成编辑和`MSV1_0`键编辑后,我只是重新启动了IIS Admin服务,它运行正常,无需重启.得到1个auth提示&in. (3认同)
  • 就我而言,它就像使用http:// localhost /而不是http://foobar.com/地址一样简单.谢谢你指点我这个方向. (2认同)

小智 5

我想添加 Michael Dark 的评论作为答案,因为我无权修改我的注册表,所以 Pete 的答案对我不起作用,但我能够解决问题。

我通过向我的网站添加一个没有指定主机名和不同端口的新绑定来解决它(因为 localhost:80 用于我)。一旦我尝试从http://localhost:86/mypage调用它,它就起作用了。在浏览器中快速检查后,我用 cURL 测试了几次,它正确地接受并拒绝了我的凭据。