Python LDAP и проблема Active Directory

Я постараюсь включить как можно больше подробностей, но рассмотрим следующую ситуацию:

Из соображений конфиденциальности, скажем, у меня есть инфраструктура Active Directory, такая как:

microsoft.com
и некоторые дочерние домены:
csharp.microsoft.com
vb.microsoft.com

Все учетные записи пользователей хранятся на microsoft.com.

Я начинаю свой код со следующего:

import ldap
ldap.set_option(ldap.OPT_REFERRALS,0)
ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT,ldap.OPT_X_TLS_NEVER)

(Я знаю, что, вероятно, у меня должен быть сертификат для домена, но что вы можете сделать)

Затем я устанавливаю соединение следующим образом:

conn = ldap.initialize("ldaps://microsoft.com:636")
conn.simple_bind_s("user","pass")

В моем скрипте я ищу учетную запись пользователя и использую следующий поиск:

result_id = conn.search("DC=microsoft,DC=com",
                                ldap.SCOPE_SUBTREE,
                                "(&(CN=gates)(!(objectClass=contact)))",
                                None)
result_type,result_data = conn.result(result_id,0)

Хорошо, отлично, так что это работает.... большую часть времени.
Когда это работает, я получаю что-то такое:

[("CN=gates,OU=Users,DC=microsoft,DC=com", {'sAMAccountName':['gates']}])

Тем не менее, кажется случайным, что я получу результаты, подобные следующим:

[(None, ['ldaps://csharp.microsoft.com/DC=csharp,DC=microsoft,DC=com'])]

Хотя результат имеет смысл - gates не существует на csharp.microsoft.com, он существует на microsoft.com DC - он все еще очень озадачивает, потому что у меня сложилось впечатление, что использование параметра OPT_REFERRALS в 0 скажет модулю LDAP Python НЕ использовать рефералов. Чтобы сделать вещи более интересными, я также иногда получаю следующие результаты:

[(None, ['ldaps://ForestDnsZones.microsoft.com/DC=ForestDnsZones,DC=microsoft,DC=com'])]

Итак, мой вопрос - что-то я делаю не так?

Кроме того, было предложено, чтобы, если бы я использовал путь поиска, такой как "OU=Users,DC=microsoft,DC=com" вместо простого поиска в корне ( "DC=microsoft,DC=com"), клиентский модуль LDAP не будет пытаться использовать рефералов - это точно?

редактировать

Проблема оказалась не в LDAP, а в неправильной конфигурации WSGI. Использование WSGIDaemonProcess решило проблему перекрестного загрязнения, с которой мы столкнулись.

1 ответ

Установка ldap.OPT_REFERRALS в 0 указывает серверу не "преследовать" рефералов, то есть не разрешать их.

Результаты с None в качестве первого элемента - это способ сервера сказать вам: "Это реферал, но вы сказали, чтобы я его не преследовал". По крайней мере, это мое понимание.

Если вы не хотите рефералов, просто проигнорируйте результаты с первым элементом None.

Другие вопросы по тегам