Kerberos身份validation失败401

我们在Windows 2008服务器上的IIS 7中部署了一个.NET MVC 3应用程序(我们称之为PROD)。 该应用程序启用了匿名和Windows身份validation – 所有其他都被禁用。 applicationHost.config中指定的身份validation提供程序是Negotiate和NTLM,按此顺序。

最近我们已经开始遇到这个应用程序的身份validation问题。 与IE连接的用户(与服务器位于不同的域中)使用“启用集成Windows身份validation”选项进行检查得到“未授权HTTP错误401.请求的资源需要用户身份validation”。 即使他们提供有效的凭据。 从Firefox访问应用程序时不会出现问题。 另外,当使用IE浏览器“启用集成Windows身份validation”取消选中一切正常。

根据我在互联网上看到的类似问题,我发现我们在Kerberosconfiguration方面存在一些问题。 事实certificate,NTLM身份validation工作得很好。 我已经检查了SPN,并且他们似乎configuration正确(有默认的configuration,因为我们的应用程序正在被服务器的netBios名称访问)。

有趣的是,我们有另一个服务器(我们称之为DEV),它承载完全相同的应用程序,并在完全相同的域中,并具有相同的身份validation和身份validation提供程序configuration和应用程序池在相同的帐户下运行,精细。 唯一的区别是PROD最近安装了.NET 4,但我不认为这可能是一个问题。 此外,PROD在IIS的以下虚拟目录中托pipe此应用程序:Sites / XYZ / XYZ,以便通过url http://server:8666/XYZ访问该站点。 DEV上的应用程序直接在IIS / XYZ中托pipe在IIS中,并通过url http://server2:8666

你能告诉我我还能检查什么? 我尝试打开Kerberos日志logging,但在尝试访问应用程序后在事件查看器中未发现日志。 我没有其他的想法在哪里看,什么检查。

首先,我将确认这发生在IE显示该网站位于“受信任的站点”区域的客户端,而“受信任的站点”区域configuration为“使用当前用户名和密码自动login”。

接下来,我怀疑http授权标头大小可能会超过IIS限制。 集成的Kerberos授权很容易受到这个问题的影响,因为IIS限制实际上相当低,并且不需要许多组成员将令牌膨胀到极限。

每个请求在http授权头中都包含用户的Kerberos标记。 由于令牌是编码的,所以通常比实际使用的内存大得多。

您可以使用以下文件增加值:

Windows的Http.sysregistry设置
http://support.microsoft.com/kb/820129

我会使用下面的值:

MaxRequestBytes – 设置为1048576
MaxFieldLength – 设置为65534

另一个有用的实用程序DelegConfig。 您可以将其作为应用程序放在任何网站上,然后连接以获取有关如何configurationKerberos身份validation的非常有用的报告。 这将需要作为受害者帐户(或适当configuration的testing帐户在受害者的域中显示症状)进行testing。

http://blogs.iis.net/brian-murphy-booth/archive/2007/03/09/delegconfig-delegation-configuration-reporting-tool.aspx

您可能还需要查看:

如何在configurationInternet信息服务上承载的Web应用程序时使用SPN
http://support.microsoft.com/kb/929650

特别:

“在Active Directory中,validation帐户是敏感的,无法委派checkbox被清除的访问该应用程序的用户。

“确认属于Kerberos进程的所有计算机都具有一致的名称parsing并通过Kerberos信任进行连接。例如,validation参与Kerberos进程的计算机是在同一个林中还是跨林的一部分Kerberos信任“。

“validation令牌大小不超过为MaxTokenSize属性设置的值”。 (MaxTokenSize应该设置为65535)。

Internet Explorer 6不能使用Kerberos身份validation协议连接到使用非标准端口的网站
http://support.microsoft.com/kb/908209

在下面的文章中也有一些优秀的技巧。

https://blogs.msdn.com/b/friis/archive/2009/12/31/things-to-check-when-kerberos-authentication-fails-using-iis-ie.aspx

特别是使用NetMon或KerbSpy检查客户端是否连接到预期的SPN。