LDAP和AD - 我们总是被允许搜索吗?

时间:2015-04-15 04:59:47

标签: python-2.7 ldap python-ldap

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

客户端为我的应用程序提供了两种不同类型的使用者 - 它们位于不同的OU中。

我的问题是:我是傻瓜吗?我是否需要担心验证搜索?从登录时提供的用户名获取用户DN的标准方法是什么?

谢谢!

1 个答案:

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