use*_*622 6 java kerberos active-directory spnego single-sign-on
尝试通过SPNEGO和Kerberos对Windows客户端(IE/Firefox)进行身份验证.服务器端是Java/Tomcat,带有用于SPNEGO身份验证的JCIFS.在Win 2008 R2服务器上托管服务器端时,SSO(Kerberos)auth工作正常.但是,当在2012服务器上时,它失败了GSSException: Defective token detected
.
通过网络跟踪深入挖掘我发现,在工作的情况下,IE客户端发送带有4个mechTypes的协商令牌:
MS KRB5
,KRB5
,NEGOEX
,和NTLMSSP
在这种情况下,我的服务器端将完成SPNEGO选择MS KRB5
.但是,在问题的情况下,IE客户端只发送带有2个mechtypes的令牌 - NEGOEX
和NTLMSSP
.这是首选的发起人.Java不支持NEGOEX,因此失败.
一些搜索显示此问题与JDK*中的错误或DNS问题有关.但是,我在最新的JDK和DNS似乎没问题.所以我的问题是,Windows中的浏览器什么时候切换到SPNEGO中的NEGOEX?为什么?我找到的最接近的答案是在msdn博客中说的Kerberos is not available since it's not in a domain environment
.但是,客户端确实在域环境中并klist
显示有效的Kerberos票证.如果它确实是一个域问题,究竟可能是根本原因,我该如何避免这个问题呢?