2009-03-17 5 views
4

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

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

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

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

ответ

3

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

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

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

1

Отъезд Tim Golden's Python Stuff.

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

Это не работает для меня. Я попытался использовать это с вишневым за IIS 6.0. Он отлично работал в оболочке python - я предполагаю, что что-то не работает с permissons, необходимыми для подключения к AD. – e1i45

2
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