1

以下は機能し、すべてのユーザーのリストを返します

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 の Active Directoryです

4

2 に答える 2

2

コマンドラインと python スクリプトからのバインドに異なる資格情報を使用しています。

コマンド ラインは のバインド DN をOFFICE\Administrator使用していますが、スクリプトは のバインド DN を使用しています。cn=Administrator,dc=office,dc=lbox,dc=com

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

dnコマンド ライン クエリから返された を Python コードでdnバインドの として使用します。

于 2014-05-06T17:09:04.690 に答える
0

python-ldap ライブラリはユーザー名を解析しません。ldapsearch も解析しません。コードでは、単純に同じユーザー名を使用し、OFFICE\AdministratorActive 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 )
于 2015-04-30T13:18:58.550 に答える