2017-01-20 17 views
2

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

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

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

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

+0

Пока нет возможности сделать это в Keycloak из коробки, но вы можете реализовать это самостоятельно, если хотите. Возможно, у них будет это в будущем выпуске. Было бы здорово. –

+0

Мне удалось реализовать это в Keycloak самостоятельно. Если кому-то нужны какие-то указатели, пожалуйста, дайте мне знать. –

+0

Я пытаюсь найти лучший способ реализовать именно это, какие варианты вы выбрали? –

ответ

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

и здесь у вас есть 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); 
     } 
    } 
} 

Надеется, что это помогает.

+0

Привет, Адриан, мне интересно, можете ли вы помочь - я пытаюсь сделать подобное изменение в KC 3.1.0, мне удалось найти правильный класс, однако сами файлы .class выглядят закодированными в формате I ' m не удалось открыть как читаемый текст, как вы обошли это, другую среду IDE? –

+0

Привет, Том. Прежде всего, вам нужно запустить проект git на локальном компьютере: https://github.com/keycloak/keycloak. После этого вам нужно будет внести свои изменения, построить, а затем построить для распространения. Проверьте раздел «Запуск Keycloak» на странице github. Надеюсь, это поможет. –