Есть ли какой-либо предпочтительный способ получения информации о пользователе / ​​группе из домена Active Directory в Python? - PullRequest
4 голосов
/ 17 марта 2009

Для приложения Django, над которым я работаю, я хотел, чтобы членство в группе определялось группой Active Directory. Через некоторое время покопавшись в документации по pywin32, я придумал следующее:

>>> import win32net
>>> win32net.NetUserGetGroups('domain_name.com', 'username')
[(u'Domain Users', 7), ...]

Я потратил некоторое время на поиск в Google, прежде чем понял это, и примеры, которые я нашел, почти исключительно использовали LDAP для такого рода вещей. Есть ли причина, почему это предпочтительнее этого метода? Имейте в виду пару вещей:

  1. Я не использую Active Directory для выполнения аутентификации, только разрешения. Аутентификация выполняется другим сервером.
  2. Хотя было бы неплохо иметь некоторые кроссплатформенные возможности, это, вероятно, будет работать почти исключительно в Windows.

Ответы [ 3 ]

3 голосов
/ 17 марта 2009

Интерфейс LDAP AD имеет довольно много «причуд», которые затрудняют его использование, чем может показаться на первый взгляд, и он значительно отстает от функций. Когда я работал с этим, я в основном имел дело с аутентификацией, но это, вероятно, то же самое, независимо от того, что вы делаете. Существует много странностей с точки зрения необходимости быть привязанным к определенному пользователю только для того, чтобы выполнять простой поиск, который обычный сервер LDAP позволил бы вам сделать анонимным.

Кроме того, по крайней мере год назад, когда я работал над этим, python-ldap был единственной реализацией Python LDAP, которая поддерживала где-либо близкий к полному набору функций, поскольку он построен на основе OpenLDAP, однако OpenLDAP довольно сложно собрать на Windows (и вообще), поэтому в большинстве сборок будет отсутствовать одна или несколько функций. Хотя вы не выполняете аутентификацию, отсутствие поддержки SASL / Kerberos (которая отсутствовала во время ее использования) может усложнить вам задачу.

Если у вас есть что-то, что работает, и вам нужно только запустить его в Windows, я бы очень рекомендовал придерживаться этого; использование AD через LDAP может превратиться в большой проект.

2 голосов
/ 02 марта 2011
import wmi

oWMI = wmi.WMI(namespace="directory\ldap")

ADUsers = oWMI.query("select ds_name from ds_user")

for user in ADUsers:
    print user.ds_name
1 голос
/ 08 сентября 2009

Проверьте Материал Питона Тима Голдена .

import active_directory
user = active_directory.find_user(user_name)
groups = user.memberOf
...