我编写了一个简单的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。