【问题标题】:Is there any preferable way to get user/group information from an Active Directory domain in Python?有没有更好的方法从 Python 中的 Active Directory 域获取用户/组信息?
【发布时间】:2009-03-17 14:39:46
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: python winapi active-directory ldap pywin32


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案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
      

      【讨论】:

        【解决方案3】:

        查看Tim Golden's Python Stuff

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

        【讨论】:

        • 这对我不起作用。我尝试将它与 IIS 6.0 后面的cherrypy一起使用。它在 python shell 中运行良好 - 我猜有些东西不适用于连接到 AD 所需的权限。
        猜你喜欢
        • 1970-01-01
        • 2017-01-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多