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

Jas*_*ker 5 python winapi ldap pywin32 active-directory

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

>>> import win32net
>>> win32net.NetUserGetGroups('domain_name.com', 'username')
[(u'Domain Users', 7), ...]
Run Code Online (Sandbox Code Playgroud)

不过,在我弄清楚这一点之前,我花了一段时间的谷歌搜索,我发现的示例几乎完全使用 LDAP 来处理这种事情。有什么理由比这种方法更受欢迎吗?请记住以下几点:

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

DNS*_*DNS 3

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

另外,至少在一年前,当我从事这项工作时,python-ldap 是唯一支持接近完整功能集的 Python LDAP 实现,因为它构建在 OpenLDAP 之上,但是,OpenLDAP 相当难以在 Windows 上构建(并且一般而言),因此大多数构建都会缺少一项或多项功能。尽管您没有进行身份验证,但缺乏 SASL/Kerberos 支持(在我使用它时缺少)可能会让您的事情变得复杂。

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