有没有更好的方法从Python中的Active Directory域获取用户/组信息?

时间:2009-03-17 14:39:47

标签: python winapi active-directory ldap pywin32

对于我正在处理的Django应用程序,我希望允许组成员身份由Active Directory组确定。经过一段时间挖掘pywin32文档后,我想出了这个:

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

我在谷歌搜索之前花了一段时间,但我发现的例子几乎完全使用LDAP来做这种事情。有什么理由比这种方法更受欢迎吗?记住几件事:

  1. 我没有使用Active Directory来实际执行身份验证,只使用权限。身份验证由另一台服务器执行。
  2. 虽然拥有一些跨平台功能会很好,但这可能几乎完全在Windows上运行。

3 个答案:

答案 0 :(得分:3)

AD的LDAP界面有很多“怪癖”,使得它比表面上看起来更难以使用,并且它往往落后于功能。当我使用它时,我主要处理身份验证,但无论你在做什么,它都可能是相同的。就必须被绑定为某个用户只是为了进行普通LDAP服务器允许您匿名进行的简单搜索而言,有很多奇怪的事情。

此外,至少在一年前,当我研究这个时,python-ldap是唯一支持任何接近完整功能集的Python LDAP实现,因为它建立在OpenLDAP之上,但是,OpenLDAP是在Windows上(通常)很难构建,因此大多数构建都缺少一个或多个功能。虽然您没有进行身份验证,但缺少SASL / Kerberos支持(在我使用它时缺少)可能会让您感到复杂。

如果你有一些有用的东西,只需要在Windows上运行它,我真的建议坚持下去;通过LDAP使用AD可以变成一个大项目。

答案 1 :(得分: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

答案 2 :(得分:1)

查看Tim Golden's Python Stuff

import active_directory
user = active_directory.find_user(user_name)
groups = user.memberOf
相关问题