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

在同一Java应用程序中使用不同的Kerberos KDC进行身份验证,java,kerberos,Java,Kerberos,Kerberos身份验证的本机Java支持使用系统属性Java.security.krb5.kdc和Java.security.krb5.realm指定要请求确认用户凭据的服务器有没有什么好方法可以在具有相同应用程序的不同服务器上进行身份验证? 例如,我想在服务器paons.company.com上验证用户smith,但在bigboss.company.com上验证用户johndoe。我可以尝试使用System.setProperty()切换KDC,但我不知道Java Kerberos实现是否真

Kerberos身份验证的本机Java支持使用系统属性
Java.security.krb5.kdc
Java.security.krb5.realm
指定要请求确认用户凭据的服务器有没有什么好方法可以在具有相同应用程序的不同服务器上进行身份验证?

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

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

请再次阅读-当且仅当您无法指向完整的Kerberos配置文件时,才需要设置这两个属性。请注意

如果设置了这些属性,则不需要跨域身份验证 可能,除非还提供了krb5.conf文件

因此,明智的做法是忽略这些属性,而是指向一个详细的自定义配置文件,其中包含
java.security.krb5.conf

Kerberos配置将包含以下内容:

  • 具有特定KDC的领域列表(主KDC和可选的故障切换)
  • 服务器到领域的映射(如果需要为其他服务器上经过身份验证的用户获取Kerberos服务票证)
  • 域之间的信任关系(默认情况下,
    a.COMPANY.NET
    中的主体尝试从
    B.COMPANY.NET
    连接到服务器时必须首先跳到根
    COMPANY.NET
    ,因此您也必须在列表中定义该根)

这有点枯燥,但谷歌会给你一些例子…

Kerberos不认证用户,它认证主体,即
user@REALM
;不同的KDC意味着不同的领域。因此,您的用户
smith
必须实际验证为
smith@COMPANY.PEON
vs.
johndoe@COMPANY.VIP
BTW,您正在连接什么类型的KDC实现——麻省理工学院、Microsoft Active Directory或其他什么?