Python LDAP和活动目录发行

2024-04-25 21:25:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我将尽可能多地包含细节,但请考虑以下情况:

出于隐私考虑,假设我有如下活动目录基础结构:

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将告诉Python LDAP模块不要使用REFERRALS。 为了使事情更有趣,我有时也会得到如下结果:

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

所以我的问题-我做错什么了吗?

另外,有人建议,如果我使用“OU=Users,DC=microsoft,DC=com”这样的搜索路径,而不只是从根目录(“DC=microsoft,DC=com”)搜索,那么LDAP客户机模块将不会尝试使用引用-这准确吗?

编辑

结果发现,这个问题与LDAP无关,而是WSGI mis配置。 使用WSGIDaemonProcess解决了我们遇到的交叉污染问题。


Tags: 用户comnone帐户resultdcldapconn
1条回答
网友
1楼 · 发布于 2024-04-25 21:25:05

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

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

如果你不想被推荐,就忽略第一个元素为None的结果。

相关问题 更多 >