首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ldapsearch可以工作,但python-ldap不行

ldapsearch可以工作,但python-ldap不行
EN

Stack Overflow用户
提问于 2012-11-13 06:00:13
回答 2查看 4K关注 0票数 1

下面的操作将返回所有用户的列表

代码语言:javascript
复制
ldapsearch -x -b "ou=lunchbox,dc=office,dc=lbox,dc=com" -D "OFFICE\Administrator" -h ad.office.lbox.com -p 389 -W "(&(objectcategory=person)(objectclass=user))"

我正在尝试用Python语言做同样的事情,我得到了Invalid credentials

代码语言:javascript
复制
#!/usr/bin/env python

import ldap

dn = "cn=Administrator,dc=office,dc=lbox,dc=com"
pw = "**password**"

con = ldap.initialize('ldap://ad.office.lbox.com')
con.simple_bind_s( dn, pw )

base_dn = 'ou=lunchbox,dc=office,dc=lbox,dc=com'
filter = '(objectclass=person)'
attrs = ['sn']

con.search_s( base_dn, ldap.SCOPE_SUBTREE, filter, attrs )

任何建议,使这项工作将是伟大的。我正在努力学习python-ldap谢谢

编辑

这是我得到的完整错误:

代码语言:javascript
复制
`ldap.INVALID_CREDENTIALS: {'info': '80090308: LdapErr: DSID-0C0903A9, comment: AcceptSecurityContext error, data 52e, v1db1', 'desc': 'Invalid credentials'}`

LDAP服务器是Windows server 2008 R2上的活动目录

EN

回答 2

Stack Overflow用户

发布于 2014-05-07 01:09:05

您从命令行和python脚本为绑定使用了不同的凭据。

命令行使用OFFICE\Administrator的绑定dn,而脚本使用cn=Administrator,dc=office,dc=lbox,dc=com的绑定dn

在Active Directory上,内置帐户Administrator不驻留在AD林的顶级,它通常至少驻留在Users OU下,因此您可能应该使用的dn是:CN=Administrator,CN=Users,dc=office,dc=lbox,dc=com

为用户找到正确条目的最简单方法是在命令行中实际使用帐户名称进行搜索。

代码语言:javascript
复制
ldapsearch -x -b "ou=lunchbox,dc=office,dc=lbox,dc=com" -D "OFFICE\Administrator" -h ad.office.lbox.com -p 389 -W '(samaccountname=Administrator)' dn

并在python代码中使用从命令行查询返回的dn作为绑定的dn

票数 2
EN

Stack Overflow用户

发布于 2015-04-30 21:18:59

python-ldap库不解析用户名,ldapsearch也不解析用户名。在您的代码中,只需使用相同的用户名OFFICE\Administrator并让Active Directory处理它。

此外,ActiveDirectory拒绝通过ldap进行简单绑定的情况也并不少见。您必须使用LDAPS。添加以下行以绕过证书检查:

代码语言:javascript
复制
ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)

因此,整个代码可能如下所示:

代码语言:javascript
复制
#!/usr/bin/env python

import ldap

dn = "OFFICE\Administrator"
pw = "**password**"

ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)

con = ldap.initialize('ldaps://ad.office.lbox.com')
con.simple_bind_s( dn, pw )

base_dn = 'ou=lunchbox,dc=office,dc=lbox,dc=com'
filter = '(objectclass=person)'
attrs = ['sn']

con.search_s( base_dn, ldap.SCOPE_SUBTREE, filter, attrs )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13352296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档