Wie zu binden (Authentifizierung) ein Benutzername mit ldap3 in Python ist3
Ich bin versucht, zu aktualisieren, code zu Python ist3, mit ldap3 version 0.9.7.4'.
(https://pypi.python.org/pypi/ldap3)
Zuvor, früher habe ich python-ldap mit python2 um einen Benutzer zu authentifizieren, wie diese:
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")
Diese ordnungsgemäß zurück (97, [], 2, [])
auf richtige Kennwort ein, und wirft ldap.INVALID_CREDENTIALS
auf ein bind-Versuch mit einem falschen Passwort.
Mit ldap3
in Python ist3 mache ich Folgendes:
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()
Es ist die Erhöhung der folgenden Ausnahme:
ldap3.core.exceptions.LDAPInvalidCredentialsResult: LDAPInvalidCredentialsResult - 49 - invalidCredentials - [{'dn': '', 'message': '', 'type': 'bindResponse', 'result': 0, 'saslCreds': 'None', 'description': 'success', 'referrals': None}]
Ich bin mit der user_dn
Rückgabewert von python2 ldap-Suche, da dies scheint die Arbeit in python2.
Wie kann ich diese zu binden richtig mit ldap3 in Python ist3?
(Eine seltsame Sache, die ich bemerkte, ist, dass die ldap3 ist LDAPInvalidCredentialsResult umfasst 'description': 'success'
. Ich vermute, dies bedeutet nur, Antwort erfolgreich empfangen...)
- Ok, getestet mit dem falschen Passwort und gefunden, dass die resultierende Ausnahme ist anders,
ldap3.core.exceptions.LDAPInvalidCredentialsResult: LDAPInvalidCredentialsResult - 49 - invalidCredentials - None - None - bindResponse - None
und nicht enthalten'description': 'success'
... bug?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin der Autor von ldap3, stellen Sie bitte
raise_exceptions=False
in der Connection definition und überprüfen Sie dieconnection.result
nach dem binden. Sie sollten den Grund, warum Ihrbind()
fehlgeschlagen ist.raise_exceptions=False
, aberconnection.result
scheint nicht alles enthalten, was nützlich ist, dass ich sagen kann:>>> c.result {'dn': '', 'result': 49, 'message': '', 'description': 'invalidCredentials', 'type': 'bindResponse', 'saslCreds': 'None', 'referrals': None}
c
oben mitraise_exceptions=True
noch zurück'description': 'success'
, wenn das angegebene Passwort korrekt ist.c.result
Inhalt ist unverändert, wenn das Passwort korrekt ist, oder nicht, im Gegensatz zu den Ausnahme-Ergebnis.