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

时间:2012-07-23 08:52:34

标签: 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”组以进行身份​​验证。为此,我需要从“myname@example.com”中找出DN,以便我可以提取“myname”所属的组。

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

怎么做?

谢谢

3 个答案:

答案 0 :(得分:0)

如果您想通过电子邮件地址查询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()

答案 1 :(得分:0)

您必须获取“userPrincipalName”=“myname @ example.com”或“samAccountName”=“myname”

的用户

答案 2 :(得分:0)

你必须做两件事:

  1. 找到DNS域example.com的正确子树(通常来自配置子树),如果您只有一个域,则更容易,只需忽略@之后的部分。
  2. 查看sAMAccountName = myname的子树,因为它在域内是唯一的。
  3. 这些名称通常看起来像UPN但不是。实际上,它们通常只是附加到DNS域名的sAMAccountName。