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

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

如果我将使用realm / KDC x运行该工具-该工具将正常工作。

如果我将使用realm / KDC y运行该工具-该工具也将正常工作。

如果我将运行该工具以使用realm / KDC x(登录,注销,登录,注销)执行2种身份验证-可以。

领域/ KDC y的结果相同。

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

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

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

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

问题是如何清除该缓存(而不会杀死整个应用程序),或者如果没有此类缓存/静态变量,如何使它工作?

谢谢!

最佳答案

您的问题可能是错误的krb5.conf文件。看到这里:GSSException: Message stream modified (41)

发布您的整个krb5.conf罚款和访问的SPN。

09-27 15:54