下面的操作将返回所有用户的列表
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
#!/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谢谢
编辑
这是我得到的完整错误:
`ldap.INVALID_CREDENTIALS: {'info': '80090308: LdapErr: DSID-0C0903A9, comment: AcceptSecurityContext error, data 52e, v1db1', 'desc': 'Invalid credentials'}`LDAP服务器是Windows server 2008 R2上的活动目录
发布于 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。
为用户找到正确条目的最简单方法是在命令行中实际使用帐户名称进行搜索。
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。
发布于 2015-04-30 21:18:59
python-ldap库不解析用户名,ldapsearch也不解析用户名。在您的代码中,只需使用相同的用户名OFFICE\Administrator并让Active Directory处理它。
此外,ActiveDirectory拒绝通过ldap进行简单绑定的情况也并不少见。您必须使用LDAPS。添加以下行以绕过证书检查:
ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)因此,整个代码可能如下所示:
#!/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 )https://stackoverflow.com/questions/13352296
复制相似问题