在同一Java应用程序中使用不同的Kerberos KDC进行身份验证
Kerberos身份验证的本机Java支持使用系统属性在同一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实现是否真
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或其他什么?