Kerberos错误:GSSHeader找不到正确的标记

时间:2015-08-11 12:47:25

标签: java soap kerberos spring-security-kerberos jgss

我正在尝试将Kerberos身份验证连接到SOAP服务wsdl url。 我能够成功建立连接并进行服务呼叫。 启动服务器后,我能够至少进行一次成功的服务呼叫。 但是在几次请求(1次或更多次)之后,我突然收到无效的令牌错误。 一旦我收到错误,未来的通话就不起作用,错误仍然存​​在。

如果我重新启动服务器,那么服务调用至少会运行一次。上面的循环继续。

我无法弄清楚为什么突然令牌失效,尽管之前有效。 重新启动服务器会使令牌再次有效

这是错误堆栈跟踪:

Caused by: GSSException: Defective token detected (Mechanism level: GSSHeader did not find the right tag)
        at sun.security.jgss.GSSHeader.<init>(GSSHeader.java:97)
        at sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:237)
        at sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:179)

2 个答案:

答案 0 :(得分:3)

在没有看到Base 64值或十六进制转储的情况下,我假设客户端正在发送NTLM类型1令牌而Java不支持NTLM。

答案 1 :(得分:1)

我找不到令牌无效的根本原因。但这是我如何解决这个问题。

我的身份验证在我重新启动服务器后第一次工作,并且bean在上下文中再次加载。所以我将spring bean的范围更改为prototype,以便每次创建新的代理bean时。