【问题标题】:Python LDAP module --- must I always run "whoami_s()" to successfully authenticate?Python LDAP 模块 --- 我必须始终运行“whoami_s()”才能成功进行身份验证吗?
【发布时间】:2013-11-13 01:52:08
【问题描述】:

幸运的是,这段代码仅用于测试,并且足够短,只需在此处完整复制/粘贴即可。基本上,我需要绑定到一个 dn 才能获得我的搜索的具体细节。否则,如果不绑定,它会匿名绑定,然后我只能获取准系统信息。除非我在绑定后显式运行 whoami_s(),否则我似乎无法成功绑定。

不起作用的代码(匿名绑定):

l = ldap.initialize("ldap://myldapserver")
l.simple_bind("cn=test,ou=profile,dc=site,dc=com", "abc123")
basedn = "ou=people,dc=site,dc=com"
filter = "uid=bob"
results = l.search_st(basedn, ldap.SCOPE_SUBTREE, filter)
for entry in results:
   print entry

有效的代码(成功绑定并提供所有可能的细节):

l = ldap.initialize("ldap://myldapserver")
l.simple_bind("cn=test,ou=profile,dc=site,dc=com", "abc123")
l.whoami_s()  ### <---- This is the only difference ###
basedn = "ou=people,dc=site,dc=com"
filter = "uid=bob"
results = l.search_st(basedn, ldap.SCOPE_SUBTREE, filter)
for entry in results:
   print entry

我发现关于 LDAP 模块的文档非常缺乏(例如,我找不到详细说明 bind、bind_s、simple_bind 和 simple_bind_s 之间的确切区别的任何内容,但这是另一天的问题。)。我找不到任何明确说明您需要使用 whoami_s() 或任何东西来完成绑定的内容。我应该接受它,还是应该担心?

Python: 2.6.9
LDAP module: 2.4.13

【问题讨论】:

    标签: python ldap bind ldap-query


    【解决方案1】:

    只是通过反复试验才弄清楚这一点。首先,经过更多搜索,我找到了一个网站,明确说明了bind、bind_s、simple_bind和simple_bind_s之间的区别:http://www.packtpub.com/article/installing-and-configuring-the-python-ldap-library-and-binding-to-an-ldap-directory

    末尾没有“s”的方法是异步的——无论操作是否完成,代码都会继续。以“s”结尾的方法是同步的——代码停止并等待操作完成。

    所以我在这里面临的是某种种族条件。我用“time.sleep(1)”代替“whoami_s()”,就解决了这个问题。这让我意识到我需要从“simple_bind”更改为“simple_bind_s”。在正确绑定之前,我访问 LDAP 查询代码的速度太快了,所以它是匿名执行的。

    【讨论】:

      【解决方案2】:

      这很奇怪。在最简单的情况下,客户必须:

      • 连接到服务器。
      • 如果连接成功,通过BIND请求(有simple和SASL两种)根据需要改变连接的授权状态。
      • 如果BIND成功,则传输其他LDAP请求,例如searchcomparemodifymodify DN等;在服务器到达时解释服务器的响应。 LDAPv3 客户端也可以再次 BIND,这将改变连接的授权状态。

      我不知道 whoami_s 做了什么(虽然有一个名为 WHO AM I 的 LDAP 扩展操作),但没有必要。乍一看,第一个代码示例应该可以工作。假设连接有效并且 BIND 成功,这就是所有需要的。如果还有更多,那么 API 就坏了。

      不是一个真正的答案,对不起。

      另见

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-28
        • 2015-06-29
        • 2014-02-28
        • 1970-01-01
        • 2015-05-27
        • 2013-01-01
        • 1970-01-01
        • 2014-06-12
        相关资源
        最近更新 更多