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

时间:2017-01-20 08:55:08

标签: ldap keycloak

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

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

你们有没有这个具体问题并设法以某种方式解决它?

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

使用以下代码更新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);
        }
    }
}

希望它有所帮助。