我写了一个简单的java应用程序,它使用GSSAPI连接到Active Directory(Kerberos SSO)。
我有2个领域和KDC:x和y。
如果我将使用realm / KDC x运行该工具 - 该工具将起作用。
如果我将使用realm / KDC运行该工具y - 该工具也可以工作。
如果我将运行该工具以使用realm / KDC x执行2次身份验证(登录,注销,登录,注销) - Works。
realm / KDC y的结果相同。
问题是当我尝试在两个领域/ KDC之间切换时:登录x,登出x,登录y,登出y - 尝试登录第二个时抛出异常:
GSSException:机制级别:修改了消息流(41))
只是为了澄清 - 只有当我使用2个不同的域/ KDC(当然每次一个)时才会出现问题,而不会在这两个域之间重新启动整个应用程序。
我认为java / gssapi以某种方式缓存领域或krb票证,或其他东西。
问题是如何清除此缓存(不杀死整个应用程序),或者如果没有这样的缓存/静态变量,我该如何使其工作?
谢谢!
答案 0 :(得分:0)
您的问题可能是错误的krb5.conf
文件。见这里:GSSException: Message stream modified (41)
发布您的整个krb5.conf
罚款和访问过的SPN。