我在 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
谢谢。