如何使用 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 看起来像上面的示例。
我正在实施一些基于活动目录的登录过程。 用户将输入他的邮件。
我已经通过邮件在 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(...) 后,您可以通过
获取用户 DNconn.response[0]['dn']
如果看起来像,请不要担心
CN=username,OU=city,OU=company,DC=domain,DC=domain_ending
这是DN。 还请记住,在使用 DN 登录时不要不使用 authentication=NTLM。在绑定管理员用户进行搜索时,您可能使用了 authentication=NTLM。也许用户名是 DOMAIN\adminuser。但这不是 DN! DN 看起来像上面的示例。