Java kinit 从 AD 域中确定小写领域
Java kinit determining lower case realm from AD domain
我们有一个基于 Windows 的企业级 Java 应用程序,我们希望使用 Kerberos 进行单点登录。
我们不使用任何 Kerberos 配置文件,例如 krb5.conf
或 login.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
现在,回到根本原因...
我们有一个基于 Windows 的企业级 Java 应用程序,我们希望使用 Kerberos 进行单点登录。
我们不使用任何 Kerberos 配置文件,例如 krb5.conf
或 login.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
现在,回到根本原因...