Nat*_*ams 5 python 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)
Run Code Online (Sandbox Code Playgroud)
(我知道我可能应该拥有该域的证书,但是您可以怎么做)
然后,我进行如下连接:
conn = ldap.initialize("ldaps://microsoft.com:636")
conn.simple_bind_s("user","pass")
Run Code Online (Sandbox Code Playgroud)
在我的脚本中,我正在搜索用户帐户,并且使用以下搜索:
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)
Run Code Online (Sandbox Code Playgroud)
好的,这很有效。...大部分时间。
当它起作用时,我会得到以下效果:
[("CN=gates,OU=Users,DC=microsoft,DC=com", {'sAMAccountName':['gates']}])
Run Code Online (Sandbox Code Playgroud)
但是,似乎随机得到的结果如下:
[(None, ['ldaps://csharp.microsoft.com/DC=csharp,DC=microsoft,DC=com'])]
Run Code Online (Sandbox Code Playgroud)
虽然结果很合理-csharp.microsoft.com上不存在门,而microsoft.com DC上存在门-这仍然令人非常困惑,因为我印象是使用OPT_REFERRALS设置为0会告诉Python LDAP模块不要使用推荐。为了使事情变得更有趣,有时我还会得到如下结果:
[(None, ['ldaps://ForestDnsZones.microsoft.com/DC=ForestDnsZones,DC=microsoft,DC=com'])]
Run Code Online (Sandbox Code Playgroud)
所以我的问题-我做错了什么吗?
另外,还建议如果我使用“ OU = Users,DC = microsoft,DC = com”之类的搜索路径,而不是仅从根目录(“ DC = microsoft,DC = com”)中搜索LDAP客户端模块不会尝试使用引荐-这是准确的吗?
编辑
事实证明,该问题与LDAP不相关,而与WSGI配置错误有关。使用WSGIDaemonProcess解决了我们遇到的交叉污染问题。
将 ldap.OPT_REFERRALS 设置为 0 告诉服务器不要“追逐”引用,即不要解析它们。
以 None 作为第一个元素的结果是服务器告诉您“这是一个推荐,但您告诉我不要追逐它”的方式。至少这是我的理解。
如果您不想要推荐,只需忽略第一个元素为 None 的结果。
| 归档时间: |
|
| 查看次数: |
6004 次 |
| 最近记录: |