我正在尝试在我们正在开发的Intranet应用程序上实现SSO。我正在使用SPNEGO。现在我在配置SSO时遇到了一些麻烦,希望有人能够帮助我。
设置如下:
当我打开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),但不支持降级。
所以我做错了什么,但是在一天摆弄配置和政策之后我就无法弄清楚它是什么。
希望得到一些回应。
答案 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。