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

标签 java kerberos

对 Kerberos 身份验证的 native 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 的领域列表(主 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/

相关文章:

hadoop - 避免 Hive 中其他用户删除数据库

java - 调用 GSSContext.initSecContext 间歇性失败 : Receive timed out

java - 依赖项列表中的项目 'jasmin' 和英雄无效 对于烟灰

java - 422 ReSTLet ClientProxy 和 GAE 服务器上无法处理的实体

java - 使用相同的方法名称实现接口(interface)和抽象类导致通用名称冲突

Java 和 Kerberos

c# - NegotiateStream 无法通过 SASL (POP3/IMAP/SMTP) 使用 Kerberos/NTLM/GSSAPI?

java - 在Java中验证,使用和重用密码和Kerberos凭证

来自 XML 代码的 Java GetAttribute

java - Android:通过id查找按钮