对 Kerberos 身份验证的 native Java 支持使用系统属性 java.security.krb5.kdc
和 java.security.krb5.realm
来指定确切要求确认的服务器用户凭据。 有什么好的方法可以使用相同的应用程序在不同的服务器上进行身份验证吗?
例如我想在服务器 peons.company.com
上验证用户 smith
,但在 bigbosses.company.com< 上验证用户
。我可以尝试使用 System.setProperty() 来切换 KDC,但我不知道 Java Kerberos 实现是否真的支持它。更不用说它需要线程之间的同步并且通常感觉很hacky。johndoe
/
[请不要告诉我如何使用不同的服务器配置来解决这个问题,我无法控制这些。]
最佳答案
再次阅读Oracle docs -- 您需要设置这两个属性当且仅当您无法指向完整的 Kerberos 配置文件。请注意...
if you set these properties, then no cross-realm authentication is possible unless a krb5.conf file is also provided
因此,明智的做法是忘记这些属性,而是使用 java.security.krb5.conf
指向详细的自定义配置文件
Kerberos 配置将包含,除其他外,
- 具有特定 KDC 的领域列表(主 KDC,以及可选的故障转移)
- 服务器到领域的映射(如果您需要为其他服务器上经过身份验证的用户获取 Kerberos 服务票证)
- 领域之间的信任关系(默认情况下,来自
A.COMPANY.NET
的主体尝试从B.COMPANY.NET
连接到服务器,必须首先跳到根COMPANY.NET
,因此您也必须在列表中定义该根)
MIT documentation for krb5.conf有点枯燥,但 Google 会给你一些例子......
关于java - 在同一 Java 应用程序中使用不同的 Kerberos KDC 进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41616676/