ldap version '0.9.7.4'を使用して、一部のコードをpython3に更新しようとしています。 ( https://pypi.python.org/pypi/ldap )
以前は、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
が発生します。
Python3でldap3
を使用して、私は次のようにしています:
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}]
これはpython2で動作しているように見えるため、python2のldap検索で返されたuser_dn
値を使用しています。
これをpython3のldap3を使用して適切にバインドするにはどうすればよいですか?
(奇妙なことに、ldap3のLDAPInvalidCredentialsResultに'description': 'success'
が含まれていることが1つ奇妙です。これは、応答が正常に受信されたことを意味していると思います...)
私はldap3の作成者です。接続定義で_raise_exceptions=False
_を設定し、バインド後に_connection.result
_を確認してください。 bind()
が失敗した理由を取得する必要があります。