Как получить пользователей группы (с вложенными) в OpenLDAP (UnboundID Java API)
Всем привет,
У меня проблема с получением всех пользователей, входящих в одну группу. У меня есть название группы, и моя задача - получить список всех пользователей. Я не включил свойство memberOf на сервере OpenLDAP. Пока мне удалось заставить группу использовать:
"(&(objectClass=groupOfNames)(cn=" + groupName + "))";
Когда я получил это, я использовал член атрибута найденной группы, например "cn=ldapuser1,ou=Users,dc=example,dc=com"
Затем, получив это, я сделал еще один запрос, чтобы получить всех пользователей с заданным именем (в приведенном выше примере имя будет ldapuser1). Я использую этот запрос:
"(&(objectClass=inetOrgPerson)(|" + builder + "))"; // it can contain several names
Проблема в том, что если моя основная группа будет содержать другую группу... мой второй запрос не будет работать.
Итак, что работает на данный момент: (но это не так просто и легко) получение пользователей одной отдельной группы (требуется 2 вызова на сервер - сначала для получения группы, а затем на основе атрибута члена я делаю второй запрос, который запрашивает конкретный пользователи)
Что не работает, например, если одна группа содержит одного пользователя и одну группу, которая, например, содержит 2 пользователя, в конечном результате с моим текущим решением я получил только одного пользователя. Я хочу, чтобы в этом примере было три пользователя.
Я уже работаю с поиском пользователей Active Directory, и это очень просто - я использую только memberOf с фильтром "1.2.840.113556.1.4.1941" для вложенных групп и их пользователей. Почему с OpenLDAP не может быть так просто?
Итак, мой последний вопрос: как лучше всего реализовать это, как создать такой запрос?
Мне бы очень хотелось совета от вас, ребята,
любая помощь будет оценена!
огромное спасибо,
ура
1 ответ
Почему с OpenLDAP не может быть так просто?
"1.2.840.113556.1.4.1941" (также известный как https://ldapwiki.com/wiki/LDAP_MATCHING_RULE_IN_CHAIN) - это оператор расширяемого сопоставления, который просматривает цепочку предков в объектах вплоть до корня, пока не найдет совпадение, и, насколько мне известно, доступен только в Microsoft. Active Directory.
Конечно, вы могли бы написать код для оценки каждого возвращаемого значения memberOf, чтобы определить, является ли это группой, а затем пройти через каждую группу.
Один мой друг однажды сказал: "Сложность нельзя ни создать, ни разрушить, а только перемещать". Вложенные группы - одна из таких проблем сложности. Сделайте это на клиенте или сервере, но это все равно сложно и ресурсоемко.
Вложенные группы представляют собой сложную проблему, и даже с Microsoft Active Directory, использующим "1.2.840.113556.1.4.1941", не удастся выполнить большое количество групп и / или большое количество членов. Я рекомендую избегать вложенных групп.