Сопоставить специфический атрибут 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);
}
}
}
Надеюсь, поможет.