Kerberos 身份验证失败,错误代码 401

Kerberos 身份验证失败,错误代码 401

我们在 Windows 2008 服务器上的 IIS 7 中部署了一个 .NET MVC 3 应用程序(我们称之为 PROD)。该应用程序启用了匿名和 Windows 身份验证 - 所有其他身份验证均已禁用。applicationHost.config 中指定的身份验证提供程序依次为 Negotiate 和 NTLM。

最近,我们开始遇到此应用程序中的身份验证问题。用户(与服务器位于不同的域中)使用 IE 连接时,如果选中“启用集成 Windows 身份验证”选项,则会收到“未授权。HTTP 错误 401。请求的资源需要用户身份验证。”消息,即使他们提供了有效的凭据。从 Firefox 访问应用程序时不会出现此问题。此外,当使用 IE 时,如果未选中“启用集成 Windows 身份验证”,则一切正常。

从我在互联网上读到的类似问题来看,我发现我们遇到了一些 Kerberos 配置不正确的问题。事实证明,NTLM 身份验证工作正常。我检查了 SPN,它们似乎配置正确(由于我们的应用程序是通过服务器的 netBios 名称访问的,因此存在默认配置)。

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

您能否告诉我我还可以检查什么?我尝试打开 Kerberos 日志记录,但在尝试访问应用程序后在事件查看器中未找到任何日志。我不知道该在哪里查找以及检查什么。

答案1

首先,我要确认这种情况是否发生在客户端,其中 IE 显示该站点位于受信任的站点区域,并且受信任的站点区域配置为“使用当前用户名和密码自动登录”。

接下来,我怀疑 http 授权标头大小可能超出 IIS 限制。集成 Kerberos 授权很容易受到此问题的影响,因为 IIS 限制实际上相当低,并且不需要太多组成员身份即可使令牌超出限制。

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

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

Windows 的 Http.sys 注册表设置
http://support.microsoft.com/kb/820129

我将使用以下值:

MaxRequestBytes-设置为1048576
MaxFieldLength-设置为65534

另一个有用的实用程序 DelegConfig。您可以将其作为应用程序放在任何网站上,然后连接以获取有关如何配置 Kerberos 身份验证的有用报告。这需要作为受害者帐户进行测试(或在受害者域中表现出症状的适当配置的测试帐户)。

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

您可能还需要查看:

如何在配置 Internet Information Services 上承载的 Web 应用程序时使用 SPN
http://support.microsoft.com/kb/929650

具体来说:

“在 Active Directory 中,验证是否已清除访问该应用程序的用户的“帐户是敏感的且不能委派”复选框。”

“验证参与 Kerberos 进程的所有计算机是否具有一致的名称解析并通过 Kerberos 信任进行连接。例如,验证参与 Kerberos 进程的计算机是否位于同一林中或属于跨林 Kerberos 信任。”

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

Internet Explorer 6 无法使用 Kerberos 身份验证协议连接到使用非标准端口的网站
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。

相关内容