LDAP: является ли атрибут memberOf/IsMemberOf надежным для определения членства в группе: SunONE/ActiveDirectory / OpenLDAP

контекст

Мы добавляем фильтрацию членства в группах при импорте участников с сервера LDAP в наше приложение.

(Ранее мы импортировали все элементы из заданного ldap "базового DN"; теперь администраторы могут ограничиться определенными группами, то есть членами "Sales" и "HR" в базовом DN).

Наше приложение поддерживает:

  • SunONE

  • Active Directory

Также мы планируем поддерживать только статические группы, а не динамические группы.

Как бы мы это сделали

В прошлом мы использовали два поиска для репликации членов в нашу базу данных для этой новой функциональности.

  1. поиск всех членов в base DN
  2. искать все группы (с участниками), где имя группы находится в списке (например, "Продажи" или "HR"). Программно отслеживать с помощью карты "какие пользователи принадлежат к каким группам", т. Е. Используя атрибут "член группы" ("uniqueMember" в SunONE,"член" в ActiveDirectory)
  3. Пересечь результаты № 1 и № 2, чтобы получить "членов для импорта"

Может MemberOf/IsMemberOf уменьшить запросы и логику?

В кратком исследовании Интернета я обнаружил, что SunONE и ActiveDirectory имеют атрибут (isMemberOf/memberOf), который определяет "группы, к которым принадлежит этот пользователь".

Теоретически мы могли бы упростить приведенную выше логику до одного запроса LDAP:

  1. Посмотрите всех участников в base DN, которые являются членами любой из групп

Может MemberOf/IsMemberOf уменьшить запросы и логику?

Знайте проблемы: - memberOf/isMemberOf поддерживает только статические группы - он не поддерживает вложенные группы

Вопрос

  • Будет ли работать этот подход с использованием memberOf/IsMemberOf?
  • Любые предостережения?
  • А как насчет OpenLDAP или других серверов? все ли они поддерживают такой атрибут. (Я вижу, что OpenLDAP имеет memberOf "overlay", но администратор должен явно включить его)

Ссылка

SunOne: http://docs.oracle.com/cd/E19575-01/820-2763/bcajq/index.html

Active Directory: http://msdn.microsoft.com/en-us/library/ms677943.aspx

Связанные вопросы SO: Как написать LDAP-запрос, чтобы проверить, является ли пользователь членом группы?

memberOf vs. groupMembership в LDAP (Liferay)

2 ответа

Решение
Will this approach using memberOf/IsMemberOf work?

Это будет работать с учетом предостережений.

Any caveats?

Если он работает так, как работает реализация OpenLDAP, атрибут memberOf работает только для записей, сделанных после его включения. Это не "догоняет".

What about OpenLDAP or other servers? do they all support such an attribute. (I see that OpenLDAP has memberOf "overlay", but an

администратор должен явно включить его)

Вы можете запросить корневой DN любого сервера LDAP, чтобы выяснить, поддерживает ли он эту функцию. Вы правы в отношении поддержки OpenLDAP этого.

Я не могу говорить с Sun ONE, но Active Directory поддерживает атрибут memberOf от пользователей, и вы можете запросить его. Атрибут является многозначным атрибутом, который содержит однозначное имя групп, к которым принадлежит пользователь.

Тем не менее, вам придется запрашивать группу по dn, и вы не можете использовать сопоставление с подстановочными знаками как ее часть. Это изначально не поддерживает вложенные группы, но если вы хотите, я бы просто добавил objectCategory к атрибутам запроса и проверил: "Если этот член - другая группа, повторите поиск".

Все это идет к черту, если у вас есть петля в структуре вашей группы, но я уверен, что это делает много других вещей, и AD мешает вам сделать это.

Другие вопросы по тегам