我正在尝试查找 Kerberos 的 Spring Security 实现是否处理授权票证的委托/转发以便我的应用服务器可以调用其他 Kerberos 服务重用主体 TGT 的信息?任何有关此的文档将不胜感激。干杯!
3 回答
自Spring Security Kerberos 1.0.0发布以来,这是可能的。
SunJaasKerberosTicketValidator
可以配置为存储身份验证上下文:
ticketValidator.setHoldOnToGSSContext(true);
这里有一些代码可以帮助您入门:
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (authentication instanceof KerberosServiceRequestToken) {
KerberosServiceRequestToken token = (KerberosServiceRequestToken) authentication;
if (token.getTicketValidation() == null) {
// No delegation possible...
} else {
GSSContext context = token.getTicketValidation().getGssContext();
// ...
}
}
Spring security 不实现任何 Kerberos 功能。如果您指的是 kerberos扩展,那么答案是否定的。它只进行身份验证,它只是 Java JAAS API 的包装器Krb5LoginModule
。
正如 Koraktor 所提到的,SunJaasKerberosTicketValidator 类具有与 JAAS 配置文件等效的详细信息。但是,SunJaasKerberosTicketValidator
已将isInitiator
标志设置为 false。这会导致context.getCredDeleg()
返回 false,并且您不能委派凭据。我做了一个 POC,我的观察是委托/转发只有在isInitiator
设置为 true 时才有效。
我通过编写自己的方法解决了这个问题TicketValidator
,一切都SunJaasKerberosTicketValidator
保持原样,除了将 isInitiator 标志的条目更改为 options.put("isInitiator", "true");