SSO身份验证,响应始终是NTLM

时间:2012-12-18 15:31:03

标签: java kerberos spnego

我正在尝试在我们正在开发的Intranet应用程序上实现SSO。我正在使用SPNEGO。现在我在配置SSO时遇到了一些麻烦,希望有人能够帮助我。

设置如下:

  1. 使用tomcat服务于Intranet应用程序的Linux服务器
  2. Windows Server 2008作为域控制器(Active Directory)
  3. 使用IE9和Firefox的Windows 7客户端
  4. 当我打开Intranet应用程序时,我看到从客户端到tomcat服务器的GET请求。 tomcat服务器和SpnegoFilter的第一个响应是未经授权的401,这是正确的,因为客户端需要进行身份验证。

    806 6.117724    192.168.65.50   192.168.65.50   HTTP    284 HTTP/1.1 401 Unauthorized 
    WWW-Authenticate: Negotiate\r\n
    

    然后客户端的响应是带有标志NTLMSSP_NEGOTIATE的GET请求。在这里打破了。我不期望NTLM响应,但是kerberos / spnego响应。不知何故,我无法弄清楚如何将正确的响应发送到tomcat服务器。

    808 6.123277    192.168.65.50   192.168.65.50   HTTP    637 GET / HTTP/1.1 , NTLMSSP_NEGOTIATE
    

    默认情况下,SPNEGO不支持NTLM,因此我在日志中收到以下条目:

      

    java.lang.UnsupportedOperationException:指定了NTLM。降级为基本身份验证(和/或SSL),但不支持降级。

    所以我做错了什么,但是在一天摆弄配置和政策之后我就无法弄清楚它是什么。

    希望得到一些回应。

2 个答案:

答案 0 :(得分:1)

Kerberos不适用于IP,使用完全限定的域名。

答案 1 :(得分:1)

您是否已注册SPN并且已加入客户端域? WWW-Authenticate:Negotiate将告诉Web浏览器尝试kerberos。浏览器根据地址栏中的URL将操作请求发送到OS(SSPI)。 AD中必须有一个SPN用于URL。如上所述,在您的URL中使用IP更复杂,但可以完成。如果您的客户端未加入域,则需要额外的配置工作才能使其与您的AD KDC联系。 Firefox也需要额外的设置。使用IE解决问题,以消除这一点,并在问题解决后返回FF。