Python 在ldap中提取DN(可分辨名称)

Python 在ldap中提取DN(可分辨名称),python,ldap,python-ldap,Python,Ldap,Python Ldap,我正在编写一段使用ldap服务器身份验证的代码。目前我的代码只允许用户DN和pwd进行登录 Username: CN=mynane,CN=Users,DC=example,DC=com Pwd : XXXX 现在我们要做的是允许格式中的用户名 Username: myname@example.com Pwd: xxxx 我可以使用格式为“”的凭据绑定到服务器myname@example.com,但我的代码也需要“myname”组进行身份验证。为此,我需要从“中查找DN”myname@exam

我正在编写一段使用ldap服务器身份验证的代码。目前我的代码只允许用户DN和pwd进行登录

Username: CN=mynane,CN=Users,DC=example,DC=com
Pwd : XXXX
现在我们要做的是允许格式中的用户名

Username: myname@example.com
Pwd: xxxx
我可以使用格式为“”的凭据绑定到服务器myname@example.com,但我的代码也需要“myname”组进行身份验证。为此,我需要从“中查找DN”myname@example.com“这样我就可以提取‘myname’所属的组

所以我的问题是如何从格式中找到DN”myname@example.com“

怎么做的


谢谢

如果您想通过电子邮件地址查询dn,您可以尝试以下代码

ldap = "SELECT distinguishedName From 'LDAP://DC=example,DC=com' WHERE mail = '{}'"
mail = 'myname@example.com'

import win32com.client
c = win32com.client.Dispatch('ADODB.Connection')
c.Open('Provider=ADsDSOObject')
rs,rc = c.Execute(ldap.format(mail))
while not rs.EOF:
    for e in rs.fields:
        print('{}: {}'.format(e.Name, e.Value))
    rs.MoveNext()

您必须获取“userPrincipalName”为“”的用户myname@example.com'或'samAccountName'='myname'

您必须做两件事:

  • 为DNS domain example.com(通常从配置子树中)查找正确的子树,如果您只有一个域,则更容易,只需忽略@后面的部分即可
  • 在该子树中查找sAMAccountName=myname,因为它在域中是唯一的

  • 这些名字通常看起来像UPN,但实际上不是。事实上,它们通常只是附加到DNS域名的sAMAccountName。

    我不确定,但我认为上面的代码所做的是提取条目的DN属性,该条目的邮件是在身份验证过程中给出的邮件。有""myname@example.com“与用户“myname”的电子邮件有关。对不起,我不明白你说的话。myname@example.com这不是用户的电子邮件吗?或者用户没有启用电子邮件,但可以使用“myname@example.com“要认证吗?没有myname@example.com用户不是在发电子邮件吗。对不起,一开始我很困惑:)。我正在使用python ldap,用于绑定到服务器和查询数据库。python ldap不允许这样做吗?我指的是上述类型的工作。