Синхронизация пользователей через LDAP в Keycloak
Один из способов подключения провайдера существующих пользователей к Keycloak — механизм, который называется User Federation. Он позволяет используя Kerberos или LDAP синхронизировать учетные записи из корпоративного хранилища. Если пользователей в хранилище много, и оргструктура организации предполагает иерархию, то это может усложнить получение (под)группы учетных записей.
Так, например, в Active Directory используются следующие сущности:
- CN = Common Name
- OU = Organizational Unit
- DC = Domain Component
Документация по LDAP с расшифровкой аббревиатур есть на сайте Microsoft.
В настройках LDAP провайдера необходимо указать User DN. Самый простой вариант — когда все учетные записи разложены по организационным единицам:
OU=Main,DC=Orgname,DC=ru
В этом случае Keycloak с легкостью найдет все учетные записи в юните, даже если внутри него есть какая-то вложенная структура. Для этого, правда, придется включить дополнительный параметр Search Scope: Subtree.
Но что делать если администраторы Active Directory вместо создания OU сущностей добавляют нужных вам пользователей в CN? Другого способа, как дополнить описанное выше решение дополнительным фильтром для LDAP, я не нашел. В настройке Custom User LDAP Filter можно прописать все CN группы через оператор «Или» |:
(&(objectCategory=Person)(sAMAccountName=*)(|(memberOf=CN=CMS_EDITOR,OU=Security,OU=Groups,OU=Central,OU=Main,DC=Orgname,DC=ru)))
В примере указана только одна группа — CMS_EDITOR.