IIS 8.5中的Windows身份验证 - 间歇性404错误

时间:2017-06-28 15:57:14

标签: asp.net iis webforms windows-authentication iis-8

我正在将ASP.NET WebForm 2.0网站从Windows Server 2003(IIS 6)迁移到Windows Server 2012R2(IIS 8.5)。

该网站为内部用户使用Windows身份验证。

在IIS 6中,Windows身份验证工作正常。

在IIS 8.5中,有时Windows身份验证有效,用户可以看到该网站,但有时,Windows身份验证根本不起作用,用户看到404错误(“无法找到网页”错误是显示)。

我使用Fiddler观看网站流量:

  • 每当Windows身份验证工作时,我看到Web请求都有Authorization标头,如下所示: 授权:谈判TlRMTVNTUAADAAAAGAAYAIAAA .................. (总共650个字符)

  • 每当Windows身份验证不起作用时,我看到Web请求要么没有Authorization标头,要么具有Authorization标头,如下所示: 授权:协商TlRMTVNTUAABAAAAl4II4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADA ==(总共80个字符)

您能建议如何解决此问题吗? 如何使Windows身份验证在IIS 8.5中一致地工作。

我还注意到IIS中的Windows身份验证设置中有2个提供程序: - 谈判 - NTML

我已重新排序这些提供商,但仍然遇到同样的问题。

2 个答案:

答案 0 :(得分:3)

Negotiate标头变小是名为NTLM Pre-Auth

的功能的一部分

Authorization: Negotiate TlRMTVNTUAABAAAAl4II4gAAAAAAAAAAAAAAAAAAAAAGAbEdAAAADw==

所以这是一个IE客户端功能,客户端只发送部分auth头作为NTLM pre-Auth.This article的一部分。另外我看到你的网站没有使用kerberos(NTLM令牌以TlRMTV开头......)。

  

从IIS服务器端,您可以禁用内核模式   身份验证并验证其是否有效

  • 在IIS管理器中转到网站
  • 打开身份验证
  • 单击Windows身份验证
  • 从“操作”窗格(右侧) - “打开高级设置”
  • 取消选中内核模式身份验证disable kernel mode authentication
  • 重新启动IIS

很奇怪,你收到404错误。你的应用程序中是否有任何要求它只适用于kerberos(kerberos授权,双跃点等)?通常你的应用程序应该有一个kerberos令牌,除非一些基本的东西是fine

修改

如前所述,看起来该网站使用的是NTLM,而不是使用Kerberos。这是因为kerberos无法使用外部域或IP地址。因此它将回退到NTLM并且使用NTLM IE可能会使用NTLM pre-Auth。我仍然不知道404错误,通常你应该得到401错误。获得404可能是应用程序特定的。

答案 1 :(得分:0)

经过3天的调查,我们的网络团队已经意识到这个网站在IIS中有2个绑定:

  • 一个绑定到内部IP地址
  • 一个绑定到外部IP地址。

他们已删除与外部IP地址的绑定,该网站与Windows身份验证完美配合。