我们在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。
您可能还需要查看:
如何在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
在下面的文章中也有一些优秀的技巧。
特别是使用NetMon或KerbSpy检查客户端是否连接到预期的SPN。