我编写了一个简单的 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 票证或其他东西。
问题是我怎样才能清除这个缓存(而不杀死整个应用程序),或者如果没有这样的缓存/静态变量,我怎样才能让它工作?
谢谢!