所以我对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`
我在这里缺少什么?
答案 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)
因此,在将所有内容扔到墙上并且没有任何问题之后,我会按照每个开发人员的工具执行操作 - 从头开始并抛弃所有被告知的内容。解决方案是:
删除用户身份验证并匿名拨打电话
是的,甚至认为我必须跳过安全箍才能访问该呼叫,因此无需进行身份验证即可使用它。是的,我们只是快乐并继续前进。不要纠缠于此。