1

我编写了一个简单的 java 应用程序,它使用 GSSAPI 来连接到 Active Directory (Kerberos SSO)。

我有 2 个领域和 KDC:x 和 y。

如果我将使用领域/KDC x 运行该工具 - 该工具将起作用。

如果我将使用领域/KDC y 运行该工具 - 该工具也可以工作。

如果我将运行该工具以使用领域/KDC x(登录、注销、登录、注销)执行 2 次身份验证 - 有效。

领域/KDC y 的结果相同。

问题是当我尝试在两个领域/KDC 之间切换时:登录 x、注销 x、登录 y、注销 y - 尝试登录第二个时抛出异常:

GSSException:机制级别:消息流已修改 (41))

只是为了澄清 - 只有当我使用 2 个不同的领域/KDC(当然每次一个),而不在这两个之间重新启动整个应用程序时,才会出现问题。

我认为 java/gssapi 以某种方式缓存了领域或 krb 票证或其他东西。

问题是我怎样才能清除这个缓存(而不杀死整个应用程序),或者如果没有这样的缓存/静态变量,我怎样才能让它工作?

谢谢!

4

1 回答 1

0

您的问题可能是krb5.conf文件错误。请参见此处:GSSException:消息流已修改 (41)

发布您的全部krb5.conf罚款和访问的 SPN。

于 2013-05-07T20:06:29.223 回答