【问题标题】:LDAP and AD - are we always allowed to search?LDAP 和 AD - 我们总是允许搜索吗?
【发布时间】:2015-04-15 04:59:46
【问题描述】:

我正在为客户端开发一个 django 应用程序作为第三方,我需要使用 LDAP 进行身份验证 - 我一直假设行业 LDAP 服务器不会让任何客户端在树中搜索 DN,所以我认为我需要自己构建 DN 或以某种方式验证搜索,我无法在线找到任何地方的文档。

对于我的应用,客户端有两种不同类型的消费者 - 它们位于不同的 OU 中。

我的问题是:我是不是很傻?我需要担心对搜索进行身份验证吗?从用户登录时提供的用户名获取用户 DN 的标准方法是什么?

谢谢!

【问题讨论】:

    标签: python-2.7 ldap python-ldap


    【解决方案1】:

    这取决于您的 LDAP 实现。

    例如,Active Directory 将不允许未经身份验证的搜索。在这种情况下,您必须首先以经过身份验证的用户身份登录,然后搜索树。

    对于其他实现,它们可能允许匿名绑定。

    一旦您能够搜索树 - 只需编写正确的查询即可。在 Active Directory 中,登录名存储为 sAMAccountName,因此要获取用户,您需要登录并将其绑定到搜索;但是您必须先进行身份验证。这是一些执行此操作的代码(没有任何错误检查):

    def get_user(user):
        user_dn = "DC=DEPARTMENT,DC=FOO,DC=COM"
        login_attr = '({}={})'.format('sAMAccountName', user)
    
        conn = ldap.initialize(your_ldap_url)
    
        # The next two lines are required for AD specific
        # quirks, you may have to comment them for other LDAP servers
        conn.set_option(ldap.OPT_REFERRALS, 0)
        conn.set_option(ldap.OPT_PROTOCOL_VERSION, 3)
    
        conn.bind("Foo User", "Sekret") # Authenticate first
                                        # before searching
        result = conn.search_s(user_dn,
                               ldap.SCOPE_SUBTREE,
                               login_attr)
        return result[0][1]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-25
      • 2018-05-01
      • 1970-01-01
      • 2023-02-10
      • 1970-01-01
      • 2020-09-23
      • 2011-12-07
      • 2011-05-04
      相关资源
      最近更新 更多