Сопоставить специфический атрибут LDAP с ролями Keycloak

В моем Keycloak установлено соединение LDAP. Мне удалось импортировать обычные роли LDAP в keycloak с помощью картографа. В нашем LDAP у нас есть роли, также отображаемые как пользовательские атрибуты, поэтому, как cn, sn, c... у нас есть attributeRoles. Конечно, это не роли с технической точки зрения, а атрибуты пользователя (они используются в нашем приложении как роли).

Чего я хочу добиться - это сопоставить эти роли пользовательских атрибутов (attributeRoles) с реальными ролями в keycloak.

Кто-нибудь из вас имел эту конкретную проблему и сумел как-то ее решить?

Любая помощь будет оценена.

1 ответ

Решение

Обновите onImportUserFromLDAP в RoleLDAPStorageMapper с помощью следующего кода:

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());
        }
    }

и здесь у вас есть функция importAttributes:

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);
        }
    }
}

Надеюсь, поможет.

Другие вопросы по тегам