在同一个 Java 应用程序中使用不同的 Kerberos KDC 进行身份验证

Authenticating with different Kerberos KDC in the same Java application

对 Kerberos 身份验证的本机 Java 支持使用系统属性 java.security.krb5.kdcjava.security.krb5.realm 来指定确切询问哪个服务器以确认用户凭据。 有什么好的方法可以在不同的服务器上使用相同的应用程序进行身份验证吗?

例如我想在服务器 peons.company.com 上验证用户 smith,但在 bigbosses.company.com 上验证用户 johndoe。我可以尝试使用 System.setProperty() 来切换 KDC,但我不知道 Java Kerberos 实现是否真的支持它。更不用说它需要线程之间的同步并且通常感觉很hacky。

[请不要告诉我如何使用不同的服务器配置来解决这个问题,我无法控制这些。]

再读一遍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 的领域列表 (主要的,以及可选的故障转移)
  • 服务器到领域的映射(如果您需要为其他服务器上的已验证用户获取 Kerberos 服务票证)
  • 领域之间的信任关系 (默认情况下,来自 A.COMPANY.NET 的主体尝试连接到来自 B.COMPANY.NET 的服务器必须首先跳转到根 COMPANY.NET , 所以你也必须在列表中定义那个)

MIT documentation for krb5.conf 有点枯燥,但 Google 会给你一些例子...