Подключение LDAP пользователей и групп в Keycloak¶
Keycloak позволяет интегрировать внешние LDAP-провайдеры для управления пользователями. Рассмотрим, как добавить провайдера LDAP и настроить мапперы для корректной синхронизации данных пользователей и групп.
Предварительно нужно создать сервисный аккаунт uidkeycloak в FreeIPA:
Создание User Federation¶
User Federation:
Add LDAP providers:
UI display name: freeipa
Vendor: Red Hat Directory Server
Connection URL: ldaps://freeipa.truedev.ru
Test Connection
Bind DN: uid=uidkeycloak,cn=sysaccounts,cn=etc,dc=truedev,dc=ru
Bind credentials: ***
Test Authentication
Edit mode: READ_ONLY
Users DN: cn=users,cn=accounts,dc=truedev,dc=ru
Username LDAP attribute: uid
RDN LDAP attribute: uid
UUID LDAP attribute: uidNumber
search scope: one level
Sync Registrations: Off
Periodic full sync: Off
Periodic changed users sync: On
Changed users sync period : 60
Save
Добавление uidNumber ldap mapper¶
Добавление uidNumber LDAP маппера в Keycloak важно для правильного и уникального сопоставления пользователей между LDAP и Keycloak. uidNumber служит уникальным идентификатором для каждого пользователя в LDAP и необходим для точного отображения информации.
Входим в созданную федерацию:
- Mappers - Add mapper
Name: user-attribute-ldap-mapper
Mapper type: user-attribute-ldap-mapper
User Model Attribute: uidNumber
LDAP Attribute: uidNumber
Read Only: On
- Action - Sync all users:
Sync of users finished successfully.2 users added, 0 users updated, 0 users removed, 0 users failed.
Mapper
Если Неверно передается firstname из Freeipa to Keycloak: чтобы исправить нужно открыть User federation - Mapper - firstname и изменить LDAP attribute cn to givenName
Маппинг groups из ldap¶
С заданной периодичностью в федерации будут опрашиваться ldap каталог по cn=groups,cn=accounts,dc=truedev,dc=ru
и группы оттуда будут мапиться на вновь создаваемые(или обновленные) группы в keycloak.
Входим в созданную федерацию:
- Mappers - Add mapper
name: ldap-groups
Mapper type : group-ldap-mapper (this the property to be selected when creating this new ldap mapper)
LDAP Groups DN * : cn=groups,cn=accounts,dc=truedev,dc=ru
Group Name LDAP Attribute: cn
Group Object Classes: groupsOfNames
Preserve Group Inheritance: On
Ignore Missing Groups: Off
Membership LDAP Attribute: member
Membership Attribute Type: DN
Membership User LDAP Attribute: uid
LDAP Filter :
Если нужно выдергивать из ldap определенные группы, например admins, то нужно в маппинге прописывать filter для ldap:
Во freeipa создадим группу admins:
DN: cn=admins,cn=groups,cn=accounts,dc=truedev,dc=ru
Добавим в группу admins пользователя.
И если посмотреть ldap каталог группу admins, то увидим, что добавился новый member и получается Членство в группе admins определяется добавлением атрибута member с именем пользователя: uid=admin,cn=users,cn=accounts,dc=truedev,dc=ru
Входим в созданную федерацию:
- Mappers - Add mapper
name: ldap-admin-group
Mapper type : group-ldap-mapper (this the property to be selected when creating this new ldap mapper)
LDAP Groups DN * : cn=groups,cn=accounts,dc=truedev,dc=ru
LDAP Filter : (cn=admins)

Groups Path / - этот слеш будет добавляться в начале всех групп(названия групп будет передаваться например в keycloak как /admins )
Для всех остальных полей сопоставления берется значение по умолчанию, как указано выше.
Синхронизация ldap group mapping¶
Входим в созданную федерацию:
- Action - Sync all users:
Проверяем в Groups группы из ldap.
Просмотр пользователей¶
Внедрение информации о группах в user token¶
Чтобы члены групп в KeyCloak получали соответствующую роль в подключаемых клиентах. Для достижения этой цели нам необходимо проинклюдить group membership в токены, выдаваемые клиентом KeyCloak.
В KeyCloak нам нужно настроить "Mapper" - небольшой автоматизированный фрагмент кода, который знает, как сделать include groups в user token scope.
Открываем Client Scopes, создаем:
name: groups
add mapper:
Mapper type: Group Membership
Name *: groups
Token Claim Name: groups
Full group path: On
Add to ID token: On
Add to access token: On
Add to userinfo: On
Add to token introspection: On
References:¶
- https://serverfault.com/questions/1049936/unable-to-add-users-from-keycloack-on-freeipa-via-ldap-although-keycloack-host-h
- https://github.com/keycloak/keycloak/issues/15623