我们有一个基于Windows的企业级Java应用程序,我们希望使用Kerberos进行单点登录。
我们不使用任何Kerberos配置文件,比如krb5.conf或login.conf,因为我们希望保持客户端尽可能简单,并尽可能灵活地进行更改。
过去几个星期以来,它一直运行良好,只是大多数人必须重新输入他们的Windows密码才能进行身份验证。我可能会在稍后发布另一个关于这个问题。
现在,出于某种原因,应用程序将Kerberos确定为username@corp.example.com而不是username@CORP.EXAMPLE.COM。然后,使用krb_error 41 Message stream modified,身份验证自然会失败。断断续续的登录最终会暂时解决这个问题。
这可以通过使用Java中的股票kinit.exe (或调用其类sun.security.krb5.internal.tools.Kinit)来再现。由于我没有找到关于kinit在没有提供主名称的情况下的实际行为的任何信息,所以我不知道在哪里查找任何原因。
发布于 2016-05-19 13:49:35
原因是由于某种原因,windows决定在某些情况下将USERDNSDOMAIN环境变量设置为小写。
Kinit从那里获得它的默认领域,请参阅参考链接:http://www.docjar.com/html/api/sun/security/krb5/Config.java.html#1071
现在说到根本原因..。
https://stackoverflow.com/questions/37319890
复制相似问题