我们在Windows上有一个基于Java的企业级应用程序,我们希望使用Kerberos进行单点登录。
我们不使用任何Kerberos配置文件,例如krb5.conf
或login.conf
,因为我们希望让客户尽可能简单并且尽可能保持弹性。
它过去几周都运行良好,只是大多数人不得不重新输入他们的Windows密码进行身份验证。我稍后可能会再发一个问题。
现在,由于某种原因,应用程序将Kerberos prinicpal确定为username@corp.example.com
而不是username@CORP.EXAMPLE.COM
。然后,身份验证失败,当然是krb_error 41 Message stream modified
。注销然后再次打开最终会暂时解决该问题。
可以使用Java JDK中的stock kinit.exe(或调用其类sun.security.krb5.internal.tools.Kinit
)来复制。由于我没有找到关于kinit在没有提供主要名称时如何表现的任何信息,我不知道在哪里寻找任何原因。
答案 0 :(得分:0)
原因是由于某种原因,Windows在某些情况下决定将USERDNSDOMAIN
环境变量设置为小写。
Kinit从那里获得默认领域,请参阅链接以供参考:http://www.docjar.com/html/api/sun/security/krb5/Config.java.html#1071
现在,根本原因......