Извлечение DN(отличительного имени) в 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@example.com", чтобы я мог извлечь группу "myname", к которой принадлежит.

Итак, мой вопрос, как я могу узнать DN из формата "myname@example.com"

Как это сделать?

Спасибо

3 ответа

Вы должны сделать две вещи:

  1. Найдите правильное поддерево для домена DNS example.com (обычно из поддерева конфигурации), если у вас есть только один домен, проще, просто пропустите часть после @.
  2. Посмотрите в этом поддереве sAMAccountName=myname, так как оно уникально внутри домена.

Эти имена часто выглядят как UPN, но это не так. На самом деле это обычно просто sAMAccountName, прикрепленное к DNS-имени домена.

Вам нужно будет выбрать пользователя, у которого 'userPrincipalName'='myname@example.com'или'samAccountName'='myname'

Если вы хотите запросить 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()
Другие вопросы по тегам