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

Context

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

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

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

  • SunONE

  • Active Directory

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

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

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

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

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

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

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

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

Может 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. group Членство в LDAP (Liferay)

Ответы [ 2 ]

2 голосов
/ 16 марта 2012
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 поддерживает это.

0 голосов
/ 27 марта 2012

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

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

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

...