Python ldap3阅读器调用失败

时间:2016-11-18 18:37:11

标签: python ldap

所以我对ldap3的第一次体验并没有按计划进行。我无法弄清楚为什么这不起作用......

来自http://ldap3.readthedocs.io/abstraction.html

的代码示例
s = Server('server')
c = Connection(s, user = 'username', password = 'password')
query = 'Department: Accounting'  # explained in next paragraph
person_reader = Reader(c, person, 'o=test', query)
person_reader.search()

这看起来很简单。但我的代码,适用于Server和Connection调用,在Reader调用中打破了块。这是代码片段:

query = 'department: Security Risk'  
person_reader = Reader(c, person, 'OU=All Businesses', query)

和令人讨厌的结果

AttributeError Traceback (most recent call last)
in ()
1 query = 'department: Security Risk'
----> 2 person_reader = Reader(c, person, 'OU=All Businesses', query)

C:\Users########\AppData\Local\Continuum\Anaconda3\lib\site-packages\ldap3\abstract\reader.py in init(self, connection, object_def, query, base, components_in_and, sub_tree, get_operational_attributes, controls)
79 self.base = base
80 self._components_in_and = components_in_and
---> 81 self.attributes = sorted([attr.name for attr in self._definition])
82 self.get_operational_attributes = get_operational_attributes
83 self.controls = controls

C:\Users##########\AppData\Local\Continuum\Anaconda3\lib\site-packages\ldap3\abstract\reader.py in (.0)
79 self.base = base
80 self._components_in_and = components_in_and
---> 81 self.attributes = sorted([attr.name for attr in self._definition])
82 self.get_operational_attributes = get_operational_attributes
83 self.controls = controls

AttributeError: 'str' object has no attribute 'name'

每个conda列表:

ldap3                     1.0.4                    py35_0`

我在这里缺少什么?

2 个答案:

答案 0 :(得分:0)

Person()的第二个参数是:

  

定义:Reader实例使用的ObjectDef。

参考:http://ldap3.readthedocs.io/abstraction.html

您必须创建一个要传入的ObjectDef,这不是用户ID。这是应该读取的对象类型的定义。您可以像以下一样使用它:

person = ObjectDef(['person','user'], conn)
r = Reader(conn, person, base, query)

我没有任何经验将第三个参数传递给Person,除了完全合格的基本DN。因此,如果ou = test不是注册的baseDn,则这可能在您的LDAP(AD)实例中不起作用。

答案 1 :(得分:0)

因此,在将所有内容扔到墙上并且没有任何问题之后,我会按照每个开发人员的工具执行操作 - 从头开始​​并抛弃所有被告知的内容。解决方案是:

删除用户身份验证并匿名拨打电话

是的,甚至认为我必须跳过安全箍才能访问该呼叫,因此无需进行身份验证即可使用它。是的,我们只是快乐并继续前进。不要纠缠于此。