Web浏览器(IE8)如何确定要为Authorization:Negotiate请求标头发送的令牌?

时间:2013-05-22 16:52:11

标签: http java-ee spnego

我正在java应用服务器上安装spnego,该服务器将针对Active Directory对用户进行身份验证。我已仔细按照所有说明操作,AD Preauth帐户在servicePrincipalName属性中包含java app服务器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 App Server计算机:Windows 2008 R2,Java 1.7,Glassfish 3.1.2.2

客户端计算机:Windows 7企业版,标准企业Windows域上的IE8

感谢。

1 个答案:

答案 0 :(得分:0)

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

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