将 LDAP 特定属性映射到 Keycloak 角色

Map LDAP specific attribute to Keycloak roles

我在我的 Keycloak 中设置了 LDAP 连接。我已经设法使用映射器将普通的 LDAP 角色导入到 keycloak 中。在我们的 LDAP 中,我们将角色也映射为用户属性,例如 cn、sn、c ...我们有 attributeRoles。当然,从技术角度来看,这些并不是真正的角色,而是用户属性(它们在我们的应用程序中用作角色)。

我想实现的是将这些用户属性角色(attributeRoles)映射到keycloak中的真实角色。

你们中有人遇到过这个具体问题并设法以某种方式解决了吗?

如有任何帮助,我们将不胜感激。

使用以下代码更新 RoleLDAPStorageMapper 中的 onImportUserFromLDAP:

Map<String, Set<String>> attributes = ldapUser.getAttributes();
    for (Map.Entry<String, Set<String>> entry : attributes.entrySet()){
        if(entry.getKey().equals(<ATTRIBUTE>)){
            // Try to import the attribute to Keycloak roles
            importAttributesFunction(user, realm, entry.getValue());
        }
    }

这里有 importAttributesFunction:

public void importAttributesFunction(UserModel user, RealmModel realm, Set<String> sRoles) {
    for(String sRole: sRoles){
        RoleContainerModel roleContainer = getTargetRoleContainer(realm);
        RoleModel role = roleContainer.getRole(sRole);

        if (role == null) {
            role = roleContainer.addRole(sRole);
        }

        if(!user.hasRole(role)) {
            user.grantRole(role);
        }
    }
}

希望对您有所帮助。