我正在开发一个 django 应用程序作为客户端的第三方,我需要使用 LDAP 进行身份验证 - 我一直假设行业 LDAP 服务器不会让任何客户端在树中搜索 DN,所以我认为我需要自己构造 DN 或以某种方式验证搜索, 我在网上找不到任何地方的文档。
客户端为我的应用提供了两种不同类型的使用者 - 它们位于单独的 OU 中。
我的问题是:我傻吗?我需要担心验证搜索吗?从用户登录时提供的用户名获取用户 DN 的标准方法是什么?
谢谢!
您的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]