Java kinit 从 AD 域中确定小写领域

Java kinit determining lower case realm from AD domain

我们有一个基于 Windows 的企业级 Java 应用程序,我们希望使用 Kerberos 进行单点登录。

我们使用任何 Kerberos 配置文件,例如 krb5.conflogin.conf,因为我们希望让我们的客户端尽可能简单并具有弹性可能。

它过去几个星期都运行良好,只是大多数人不得不重新输入他们的 Windows 密码进行身份验证。我可能会 post 稍后再问这个问题。

现在,出于某种原因,应用程序将 Kerberos prinicpal 确定为 username@corp.example.com 而不是 username@CORP.EXAMPLE.COM。然后身份验证自然会失败,krb_error 41 Message stream modified。注销并重新登录最终暂时解决了该问题。

这可以通过使用来自 Java JDK 的库存 kinit.exe(或调用其 class sun.security.krb5.internal.tools.Kinit)来复制。由于我没有找到有关 kinit 在未提供主体名称时的实际行为的任何信息,因此我不知道到哪里寻找任何原因。

原来是因为某些原因windows决定在某些情况下将USERDNSDOMAIN环境变量设置为小写。

Kinit 从那里获取其默认领域,参见 link 以供参考:http://www.docjar.com/html/api/sun/security/krb5/Config.java.html#1071

现在,回到根本原因...