J'essaie de mettre à jour du code en python3, en utilisant ldap version '0.9.7.4'. ( https://pypi.python.org/pypi/ldap )
Auparavant, j'utilisais python-ldap avec python2 pour authentifier un utilisateur comme celui-ci:
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")
Cela renvoie correctement (97, [], 2, [])
sur le mot de passe correct et lève ldap.INVALID_CREDENTIALS
lors d'une tentative de liaison avec un mot de passe incorrect.
En utilisant ldap3
en python3, je fais ce qui suit:
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()
Cela soulève l'exception suivante:
ldap3.core.exceptions.LDAPInvalidCredentialsResult: LDAPInvalidCredentialsResult - 49 - invalidCredentials - [{'dn': '', 'message': '', 'type': 'bindResponse', 'result': 0, 'saslCreds': 'None', 'description': 'success', 'referrals': None}]
J'utilise le user_dn
valeur retournée par la recherche ldap de python2, car cela semble fonctionner en python2.
Comment puis-je obtenir que cela se lie correctement en utilisant ldap3 en python3?
( Une chose étrange, j'ai remarqué, est que LDAPInvalidCredentialsResult du LDAP3 inclut 'description': 'success'
. Je suppose que cela signifie simplement que la réponse a bien été reçue ... )
Je suis l'auteur de ldap3, veuillez définir raise_exceptions=False
Dans la définition de connexion et vérifier le connection.result
Après la liaison. Vous devriez obtenir la raison pour laquelle votre bind()
échoue.