12

ldap3バージョン '0.9.7.4'を使用して、一部のコードを python3 に更新しようとしています。( https://pypi.python.org/pypi/ldap3 )

以前は、python2 で python-ldap を使用して、次のようにユーザーを認証しました。

import ldap
address = "ldap://HOST:389"
con = ldap.initialize(address)
base_dn = "ourDN=jjj"
con.protocol_version = ldap.VERSION3
search_filter = "(uid=USERNAME)"
result = con.search_s(base_dn, ldap.SCOPE_SUBTREE, search_filter, None)  
user_dn = result[0][0]  # get the user DN
con.simple_bind_s(user_dn, "PASSWORD")

(97, [], 2, [])これは正しいパスワードで適切に戻りldap.INVALID_CREDENTIALS、間違ったパスワードを使用してバインドしようとすると発生します。

ldap3python3 で使用して、次のことを行っています。

from ldap3 import Server, Connection, AUTH_SIMPLE, STRATEGY_SYNC, ALL
s = Server(HOST, port=389, get_info=ALL)
c = Connection(s, authentication=AUTH_SIMPLE, user=user_dn, password=PASSWORD, check_names=True, lazy=False, client_strategy=STRATEGY_SYNC, raise_exceptions=True)
c.open()
c.bind()

次の例外が発生しています。

ldap3.core.exceptions.LDAPInvalidCredentialsResult: LDAPInvalidCredentialsResult - 49 - invalidCredentials - [{'dn': '', 'message': '', 'type': 'bindResponse', 'result': 0, 'saslCreds': 'None', 'description': 'success', 'referrals': None}]

user_dnこれはpython2で機能しているように見えるため、python2のldap検索によって返された値を使用しています。

python3でldap3を使用してこれを適切にバインドするにはどうすればよいですか?

私が気づいた奇妙なことの1つは、ldap3のLDAPInvalidCredentialsResultに含まれて'description': 'success'いることです。これは、応答が正常に受信されたことを意味しているだけだと思います...

4

2 に答える 2

25

私は ldap3 の作成者です。raise_exceptions=False接続定義で設定しconnection.result、バインド後に確認してください。bind()失敗した理由を理解する必要があります。

于 2015-02-19T20:42:35.987 に答える
1

DN でバックスラッシュを使用してコンマをエスケープする必要がないことを確認します\

私の組織はユーザーに「姓、名」の CN を与えているため、私の DN は「CN=Doe\, Jane, OU=xyz, ..., DC=abc, DC=com」である必要がありました。

これは、Active Directory Explorerを使用してユーザー オブジェクトに移動し、右クリック > プロパティを表示して識別名を表示することで実現しました。AD Explorer がエスケープ文字を省略したパス ブレッドクラムに表示する DN を使用しているときに、この無効な資格情報エラーが発生しました。

于 2021-03-17T16:44:18.570 に答える