2012-12-18 34 views
1

我试图在我们正在开发的Intranet应用程序上实现SSO。我正在使用SPNEGO。现在我在配置SSO时遇到了一些麻烦,希望这里有人能够帮助我。SSO身份验证,响应总是NTLM

的设置是这样的:

  1. Linux服务器与Tomcat来服务于内联网应用
  2. Windows Server 2008作为域控制器(Active Directory)
  3. Windows 7客户端与IE9和Firefox

当我打开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 

默认NTLM不支持SPNEGO,所以我让我的日志以下条目:

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

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

希望得到一些回应。

回答

0

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

+0

将其更改为FQDN,但问题仍然存在。谢谢你的帮助! – pderaaij

+0

您的反向记录是否正确?你把服务器领域放到了可信区域吗?你用Wireshark分析了流量吗? –

+0

我正在使用Wireshark进行扫描,但我认为我没有足够的知识直接查看问题所在。 可以肯定,我们有相同的解释。你有什么意思与反向记录? – pderaaij

1

您是否注册过SPN并且是加入的客户端域? WWW-Authenticate:Negotiate会告诉网络浏览器尝试kerberos。浏览器根据地址栏中的URL将该请求提交给操作系统(SSPI)。 AD中必须有一个SPN用于URL。正如其他人指出的那样,在您的URL中使用IP更复杂,但可以完成。如果您的客户端未加入域,则需要额外的配置才能使其与您的AD KDC联系。 Firefox也需要额外的设置。用IE解决这个问题,消除这个问题,当问题解决后他们回到FF。