8.4.4. 凭证委托
Kerberos 支持凭据委派。应用程序可能需要访问 Kerberos ticket,以便可以重新使用它与 Kerberos 保护的其他服务交互。因为 Red Hat Single Sign-On 服务器处理 SPNEGO 协议,所以您必须将 GSS 凭证传播到 OpenID Connect 令牌声明或 SAML 断言属性中的应用程序。Red Hat Single Sign-On 从 Red Hat Single Sign-On 服务器将其传输到您的应用程序。要将此声明插入到令牌或断言中,每个应用程序都必须启用内置协议映射程序 gss delegation 凭据
。此 映射程序 位于应用程序客户端页面的"映射程序"选项卡中。如需了解更多详细信息,请参阅 协议映射程序 章节。
应用程序必须反序列化它从 Red Hat Single Sign-On 接收的声明,然后才能向其他服务发出 GSS 调用。当您将凭证从访问令牌映射到 GSSCredential 对象时,使用传递给 GSSManager.createContext
方法创建 GSSContext。例如:
// Obtain accessToken in your application. KeycloakPrincipal keycloakPrincipal = (KeycloakPrincipal) servletReq.getUserPrincipal(); AccessToken accessToken = keycloakPrincipal.getKeycloakSecurityContext().getToken(); // Retrieve Kerberos credential from accessToken and deserialize it String serializedGssCredential = (String) accessToken.getOtherClaims(). get(org.keycloak.common.constants.KerberosConstants.GSS_DELEGATION_CREDENTIAL); GSSCredential deserializedGssCredential = org.keycloak.common.util.KerberosSerializationUtils. deserializeCredential(serializedGssCredential); // Create GSSContext to call other Kerberos-secured services GSSContext context = gssManager.createContext(serviceName, krb5Oid, deserializedGssCredential, GSSContext.DEFAULT_LIFETIME);
在 krb5.conf
文件中配置转发的 Kerberos 票据,并在浏览器中添加对授权凭证的支持。
委派具有安全隐患,因此仅在需要且仅在 HTTPS 中使用它。有关更多详细信息和示例,请参阅 本文。