Извлечение 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 ответа
Вы должны сделать две вещи:
- Найдите правильное поддерево для домена DNS example.com (обычно из поддерева конфигурации), если у вас есть только один домен, проще, просто пропустите часть после @.
- Посмотрите в этом поддереве 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()