Python LDAP 和 Active Directory 问题

标签 python active-directory

我会尝试包含尽可能多的细节,但请考虑这种情况:

出于隐私考虑,假设我有一个如下所示的 Active Directory 基础结构:

微软网站
和一些子域:
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 将告诉 Python LDAP 模块不要使用推荐。 为了让事情更有趣,我有时也会得到如下结果:

[(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 解决了我们遇到的交叉污染问题。

最佳答案

将 ldap.OPT_REFERRALS 设置为 0 告诉服务器不要“追踪”引用,即不要解析它们。

第一个元素为 None 的结果是服务器告诉您“这是推荐,但您告诉我不要追查它”的方式。至少这是我的理解。

如果您不想要推荐,只需忽略第一个元素为 None 的结果。

关于Python LDAP 和 Active Directory 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9441594/

相关文章:

python - 当我尝试将模块安装到另一个 virtualenv 中时,PIP 会提示

python - 如何在 python 中的 OpenCv 中添加自定义 Keras 模型

c++ - 是否有完整的 Active Directory 属性列表以及到 LDAP 的映射?

powershell - 尝试使用 PowerShell 脚本从 Active Directory 中的所有组中删除用户

c# - 使用 LdapConnection 连接到 OpenLDAP 时出错

active-directory - 用户可以成为Active Directory中多个组织单位(OU)的成员吗?

python - Django Auth LDAP - 使用 sAMAccountName 直接绑定(bind)

python - 如何设置imshow比例

java - 如何使用 JPype 捕获并显示 java.lang.RuntimeException 的堆栈跟踪

python - json_normalize 用于字典中的字典