如何使用 python ldap3 库进行 DN 解析

How to do DN resolution using python ldap3 library

我正在实施一些基于活动目录的登录过程。 用户将输入他的邮件。

我已经通过邮件在 AD 中成功找到了用户数据库条目 - 我搜索了:

(& (mail={0})(objectClass=organizationalPerson))

并获得了很多关于用户的属性。

但是要检查它的密码我需要执行绑定操作。为此,我需要登录名或 DN。

如何使用 python ldap3 解析/获取已通过电子邮件地址找到的用户的登录名?

您可以使用刚刚发现的用户对象的可分辨名称 (DN) 登录。这是指向 LDAP 对象的指针,它不需要新的搜索。

在python-ldap中,这意味着你必须使用:

entry[0]

检索该 DN 值。只需使用该值加上用户输入的密码即可绑定到服务器。

如果您想使用属性登录,您需要知道包含登录名的 LDAP 属性名称。对于 Active Directory,您可以使用以下方式登录:

  • sAMAccountName
  • 用户主体名称

提示:通常,用户会知道他们的 userPrincipalName (UPN),因为它具有类似 name@domain.com 的电子邮件格式,并且很少与电子邮件地址相同(尽管不一定).

在python-ldap中,这意味着你必须使用:

entry[1]['userPrincipalName'][0]

第一个 UPN 值。

执行 conn.search(...) 后,您可以通过

获取用户 DN
conn.response[0]['dn']

如果看起来像,请不要担心

CN=username,OU=city,OU=company,DC=domain,DC=domain_ending

这是DN。 还请记住,在使用 DN 登录时不要不使用 authentication=NTLM。在绑定管理员用户进行搜索时,您可能使用了 authentication=NTLM。也许用户名是 DOMAIN\adminuser。但这不是 DN! DN 看起来像上面的示例。