Настройка авторизации LDAP с использованием OpenLDAP - PullRequest
0 голосов
/ 17 ноября 2018

Это то же самое, что и здесь: LDAP-авторизация

Я пытаюсь настроить LDAP для использования с приложениями PHP.У меня установлена ​​аутентификация и членство в группе.Что дальше?

Цель состоит в том, чтобы, во-первых, должны быть роли (группы в LDAP?), Например customerViewer, customerInfoUpdater и т. Д.

Затем должна быть группа пользователей.например, Том, Дик и Гарри были бы в группе финансистов.

Пока все хорошо.Я могу сделать и то и другое, настроив memberOf.

Теперь, как мне установить / назначить группу customerViewer / право / разрешение для группы financeUsers?То есть Том и др. Добавляются в группу financeUsers, а financeUsers назначается в группу customerViewer (или я здесь совершенно не прав?)

Как мне проверить, что зарегистрированный в данный момент пользователь входит в группу customerViewer, такчто он получил разрешение на просмотр записей о клиентах?

Я использую CentOS 7 на сервере и на моем клиенте Windows установлен Apache LDAP Studio.

Ответы [ 2 ]

0 голосов
/ 17 ноября 2018

Вы можете создать или использовать 2 организационные единицы, одну для списка групп , а другую для хранения ролей .Используйте объектный класс organizationalunit (обязательно):

# Groups 
dn: ou=groups,dc=example,dc=com
objectclass:organizationalunit
ou: groups
description: generic groups branch

# Roles
dn: ou=roles,dc=example,dc=com
objectclass:organizationalunit
ou: roles
description: generic roles branch

Каждая организационная единица может содержать (возможно, вложенный) список записей, причем каждая запись содержит членство пользователя через атрибут member.Возможность представлять членство стала возможной благодаря объектному классу groupOfNames:

# Create financeUsers group under groups
dn: cn=financeUsers,ou=groups,dc=example,dc=com
objectclass: groupofnames
cn: financeUsers
description: Finance team.
member: uid=someone,ou=people,dc=example,dc=com 
member: uid=someone_else,ou=people,dc=example,dc=com  

# Create customerViewer role under roles
dn: cn=customerViewer,ou=roles,dc=example,dc=com
objectclass: groupofnames
cn: customerViewer 
description: Customer viewer role (every members have 'view' access to Customer entity)
member: uid=someone,ou=people,dc=example,dc=com 
member: uid=somebody,ou=people,dc=example,dc=com  

Следует помнить, что все зависит от вашей политики доступа:

  • Если вы являетесь членомгруппа должна назначить этого члена групповой роли (которая в данном случае представляет собой набор разрешений, специфичных для группы), тогда вы можете рассмотреть возможность использования одной и той же записи ldap для хранения членства как в группе, так и в роли, поскольку разрешения предоставляются членством в группе..
  • Если членство в группе - это просто условие, но его недостаточно для предоставления разрешений или если оно не зависит от вашей политики доступа, то вам необходимо использовать членство в ролях, чтобы перейти к надлежащей авторизации.

Сам по себе чек зависит только от клиента / приложения, используемого для авторизации пользователей, обновите ваш вопрос, чтобы я мог пойти дальше или задать новый, если вы считаете, что он может принадлежать другому посту.

0 голосов
/ 17 ноября 2018

Вы можете взглянуть на оверлейную группу для OpenLDAP , которая заполняет членство в группе cutomerInfoEditor на основе фильтра, а не использования вложенных групп.

Вы можете использовать вложенные группы в вашем каталоге и обрабатывать их в коде.Если ваш customerInfoEditor only содержит один уровень вложенных групп (т.е. его члены являются группами, но ни одна из этих групп не имеет группы в качестве участников), вы можете создатьфильтр на основе списка членов customerInfoEditor.

Если членами customerInfoEditor являются группы "financeUsers", "salesUsers" и "whatOtherUsers", ваш фильтр, определяющий, будет ли назначен конкретный пользователь, USERINPUT, этой роли:

(&(uid=USERINPUT)(|(memberOf=financeUsers)(memberOf=salesUsers)(memberOf=whateverOtherUsers))

|это или оператор.Фильтр говорит, что найти пользователя где ((uid - это значение, с которым пользователь аутентифицировался) И (они являются участником financeUsers ИЛИ участником salesUsers ИЛИ участником whatOtherUsers))

Использование кода для построенияили компонент фильтра позволяет вам переопределить то, что дает кому-то право на роль customerInfoEditor без изменений кода - добавьте еще AnotherGroupOfUsers в качестве члена customerInfoEditor, и ваш фильтр динамически изменится, включив эту группу.

Возможно, вы сможете немного ускорить запрос, получив полное имя пользователя (FQDN) и изменив базу поиска на полное доменное имя пользователя.Тогда фильтр будет просто

(|(memberOf=financeUsers)(memberOf=salesUsers)(memberOf=whateverOtherUsers))

. В любом случае получение 1 записи означает, что им должен быть предоставлен доступ.0 означает, что они не должны быть.И> 1 странно - я обычно выкидываю ошибку, приказывая пользователю позвонить в нашу службу поддержки в этом случае.

Если ваши группы ролей, такие как customerInfoEditor, могут иметь несколько уровней вложенности (члены financeUsers являются членами, но члены financeUsers являются группами, такими как accountRecievableUsers, accountsPayableUsers, cfoUsers, и некоторые из этих групп могутдаже иметь группы в качестве участников) тогда ... ну, лично, так как я делаю всю свою подготовку автоматически ... я просто добавлю еще одно событие "добавить в группу" в свой рабочий процесс подготовки для всех этих групп и не использовать глубоко вложенные группы.Когда я добавляю кого-то в cfoUsers, я также добавляю к customerInfoEditor, и группа ролей будет содержать только учетные записи пользователей в качестве участников.

Но если нет другой альтернативы, единственное, что я знаю, это управление расширением группы в вашем коде.Что касается ввода / вывода, это дорого, потому что вам нужно посмотреть на все группы, членом которых является человек, проверить, в каких членах группы, проверить, чтобы увидетьк чему принадлежат эти группы.Если вы имеете дело только с одной ролью, вы можете выйти из расширения, как только роль найдена, но если вам нужно искать несколько групп ролей ... вам придется работать, пока вы не достигнете вершиныдерева и имел расширенный список всех групп, членом которых является прямой или косвенный член.И группы треков, которые вы уже расширили для обработки циклов, в противном случае A является членом B, B является членом C, C является членом D, D является членом A, становится бесконечным циклом расширения.

...