3

我在 java 应用服务器上安装 spnego,它将针对 Active Directory 对用户进行身份验证。我已密切遵循所有指示,并且 AD Preauth 帐户在 servicePrincipalName 属性中具有 java 应用服务器 FQDN。我们已经有另一个安装了 spnego 的 Java 应用程序服务器可以正常工作(我没有安装,它们不再在这里)。

我开发了一个简单的 java EE 6 Web 应用程序来测试 spnego 是否正常工作(带有 request.getRemoteUser() 的 jsp 页面)。当我在现有服务器上运行此应用程序时,我正确地得到了我的用户名响应。当我在我正在设置的新服务器上运行它时,我收到以下错误:

java.lang.UnsupportedOperationException: NTLM specified. Downgraded to Basic Auth (and/or SSL) but downgrade not supported.

使用 Fiddler 检查会话,授权:协商令牌请求到正确工作的服务器是一个巨大的字符串(我相信 Kerberos 令牌?)。对非工作服务器的授权:协商令牌请求只有 56 个字符长(所以,NTLM 令牌?)。当服务器收到该 NTLM 令牌时,我相信那是引发错误的时候。

我检查了早期协商会话的响应,但找不到服务器要求 Kerberos 与 NTLM 令牌的位置。浏览器如何确定发送什么?

其他详细信息:Java 应用服务器机器:Windows 2008 R2、Java 1.7、Glassfish 3.1.2.2

客户端机器:Windows 7 Enterprise,标准企业 Windows 域上的 IE8

谢谢。

4

1 回答 1

0
  • servicePrincipalName 不仅仅是 FQDN;它还需要包括服务。喜欢:HTTP/MYSERVER.MYDOMAIN.COM
  • 您在 Web 浏览器中访问的地址必须与该 FQDN 匹配。事实上,你可以在你的 OS HOSTS 文件中添加任何 IP 来匹配这个 FQDN,它应该可以正常工作(即使 IP 是 127.0.0.1 并且你想在本地测试 SPNEGO-Kerberos)
  • 在浏览器操作系统的命令提示符下,运行:klist get HTTP/MYSERVER.MYDOMAIN.COM,并验证您是否获得票证。我的猜测是这会失败。

假设第三点失败,那么您的客户端操作系统或 KDC 上的 Kerberos 配置(不是您的浏览器/网络服务器)存在更大的问题。

于 2016-02-07T05:40:51.723 回答