Ldap и группы пользователей (Требуется ldap-группа) - PullRequest
0 голосов
/ 12 июля 2011

Я разрабатываю приложение, и я хотел бы использовать это приложение с нашим LDAP и фильтровать пользователей по группам.У меня есть этот код в APACHE:

           AuthLDAPURL ldap://localhost/ou=users,dc=domain,dc=com?uid
           AuthLDAPGroupAttribute memberUid
           AuthLDAPGroupAttributeIsDN off
           AuthzLDAPAuthoritative on
           Require ldap-group cn=developer,cn=testers,cn=groups,dc=domain,dc=com

Работает нормально.Только люди из списка разработчиков и тестеров могут попасть внутрь этой области.Я пытаюсь сделать то же самое в Web2py, но я не могу сделать фильтр из групп

У меня есть этот код и работает нормально без групп:

auth.settings.login_methods=[ldap_auth(mode='uid_r',server='localhost',port='389',
base_dn='ou=users,dc=domain,dc=com', filterstr='objectClass=*')]

Я не знаю, какиспользовать: Требовать ldap-group в web2py.

Кто-нибудь может мне помочь?

Заранее большое спасибо

1 Ответ

0 голосов
/ 05 августа 2011

Я боролся с этим сам. Я думаю, что решение состоит в том, чтобы импортировать группы из LDAP, выполняя некоторые запросы LDAP.

Недостаток этого подхода в том, что он требует (1) вставлять группы в таблицы web2py auth_group при входе в систему FIRST. (2) Потребуется обслуживание групп, если они имеют тенденцию меняться. Это можно сделать с помощью cron или вручную.

Вы можете узнать, вошел ли пользователь ранее, как это:

query = (db.auth_event.description.like('%Logged-in%'))&(db.auth_event.user_id==auth.user.id)

if db(query).count() == 1:
  # Query LDAP for group membership, update auth_group table

Вот пример кода для запроса LDAP - этот основан на простом поиске информации о пользователе (я не уверен, как LDAP организует группы - я буду писать код для извлечения групп через неделю или две): импорт ldap из ldap.filter импортировать filter_format как ff

ldap_attrs = ['sn','givenName','telephoneNumber', 'mail' ]

FILTER_TPL = '(&%s(objectclass=i3person))'
sch = ff('(%s=%s)', ('uid', auth.user.username))

ldap_filter = FILTER_TPL % sch
con = ldap.initialize("ldap://YOUR-LDAP-SERVER")
dn= "YOUR-DN-FOR-USERS/GROUPS"
mode = "uid"
port = 389
ldap_results = con.search_s(dn, ldap.SCOPE_SUBTREE, ldap_filter, ldap_attrs)

dn, res = ldap_results[0]

Вы можете получить больше информации о ldap python здесь: http://www.python -ldap.org / docs.shtml

(здесь приведены примеры кода, относящиеся к группам запросов) http://www.ibm.com/developerworks/aix/library/au-ldap_crud/

Кроме того, НЕ забывайте использовать filter_format (импортированный как ff выше), он будет избегать ваших запросов ldap, предотвращая внедрение LDAP, если какой-либо пользовательский ввод будет допущен к коду. Для моих целей я делал общедоступную форму, в которой люди искали записи LDAP.

Вот публикация о зеркалировании групп ActiveDirectory в группы LDAP. Я публикую это, потому что, хотя это и делает обратное, некоторые из них все еще полезны, в частности, фильтр для получения групп из LDAP, поскольку он одинаков для чтения или записи и использует python-ldap: http://oxpedia.org/wiki/index.php?title=Mirorring_Active_Directory_user_acconts_in_LDAP

Если ваши группы ldap не сильно меняются, вы можете создать скрипт, который выполняет следующие действия:

  • Удалить все членство в группах для учетных записей web2py (начать заново).
  • Для каждого аккаунта запросите ldap для групп
    • Для каждого запроса извлеките все группы.
    • Скопировать группы в auth_groups, если не существует
    • Добавить участника в группу (auth_membership или что-то?)

Тогда просто запускайте скрипт по мере необходимости. Мне нравится удалять вещи при запуске таких сценариев ETL, потому что тогда вы начинаете с нуля и не дублируете вещи или не сталкиваетесь с ошибками, когда вещи уже существуют и нарушают ограничения БД.

...