2010-11-01 6 views
18

L'utilisation de LDAP consiste à vérifier un nom d'utilisateur/mot de passe aussi simplement que de tenter de lier cet utilisateur et de noter les résultats, ou existe-t-il une fonction LDAP spéciale de vérification du mot de passe? J'essaie de comprendre un peu plus les coulisses tout en travaillant sur un problème d'installation de référentiel LDAP désordonné.LDAP - Comment vérifier une combinaison nom d'utilisateur/mot de passe?

(Note: Ceci est pour les situations où le mot de passe est enregistré en tant que hachage dans une propriété personnalisée, cette situation est facile à gérer)

Répondre

16

Vous envoyez le mot de passe, le serveur compare et renvoie true ou false. C'est le non-besoin d'un moyen de connexion pour authentifier les utilisateurs.

+2

Comment vous "comparer" si le mot de passe dans le serveur LDAP est crypté? –

+0

@Ashwinkumar Il existe une fonction spécifique pour comparer un mot de passe. Vous fournissez le mot de passe à tester, il est également crypté, vous pouvez alors comparer les deux valeurs. La distinction est entre essayer de lier avec ces creds, ou appeler explicitement la fonction ldapCompare. – geoffc

+2

hmm .. Dans une question récente j'ai posté http://stackoverflow.com/questions/16168293/how-to-do-password-authentication-for-a-user-using-ldap, on m'a suggéré d'utiliser bind pour le résultat de la recherche avec le mot de passe. Reliure avec les dernières œuvres 'dn'. Cependant, la liaison est essentiellement un 'login'. faire un LDAP 'ldap_compare_s' a échoué. Est-ce que je peux obtenir un mot de passe comparé au mot de passe de l'utilisateur LDAP? –

2

de liaison que cet utilisateur est suffisant. Le mot de passe est vérifié dans le processus de liaison. LDAP prend en charge la comparaison de userPassword.

+3

Ceci est vraiment un commentaire, pas une réponse à la question. Veuillez utiliser "ajouter un commentaire" pour laisser un commentaire à l'auteur. – Conner

+3

@Conner Vous vous trompez.En fait, c'est vraiment une réponse directe à la question "est de vérifier un nom d'utilisateur/mot de passe aussi simple que d'essayer de lier cet utilisateur". – EJP

+0

J'espère que mon commentaire ne vous a pas offensé. Ce commentaire en attente a été généré par le système de révision bêta. Personnellement, je pense que les réponses «oui/non» ou mineures à des questions spécifiques conviennent mieux comme commentaires. Je ne veux rien dire contre vous personnellement par cette opinion. Cordialement. – Conner

4

Attention, en utilisant bind pour vérifier le nom d'utilisateur/mot de passe, sur certains systèmes, cela comptera comme une connexion, et avec des restrictions de connexion, il pourrait échouer. L'utilisation de compare est une meilleure option pour vérifier le mot de passe.

+1

Un login avec un mot de passe nul compte également comme une liaison anonyme, qui réussira toujours. – geoffc

+2

Je suppose que la «bonne» approche dépend de ce que vous essayez de faire. Dans le cas courant d'écriture d'une application qui délègue l'authentification à un répertoire externe, les restrictions de connexion sont généralement * souhaitables *, non? –

+0

Je ne sais pas quelle pourrait être la différence entre 'vérifier mot de passe' et 'connexion', ou plutôt pourquoi vous voudriez jamais faire l'un sans l'autre. @geoffc Une liaison anonyme ne réussira que si le serveur est configuré pour les autoriser. – EJP

5

Regardez dans le WhoAmI Extended Operation (RFC 4532).

WhoAmI sert vraiment à valider les informations de connexion soumises. Il ne devrait pas affecter ni provoquer de "restrictions de connexion" (que je connais). WhoAmI peut être fait en utilisant un binaire dédié (tel que "ldapwhoami"), ou il peut être fait en utilisant Net :: LDAP :: Extension :: WhoAmI (Perl) ou un autre langage qui supporte les opérations LDAP. Notez que "tester un mot de passe" à l'aide de la fonction "Recherche" est une méthode de test peu judicieuse. Par exemple, si mon DN est "uid = max, ou = utilisateurs, dc = société, dc = com" et que mon mot de passe est "@secret", on pourrait le faire via le binaire dédié sur une machine Linux (Note -ZZ est utilisé pour la confidentialité TLS, ce qui est peut-être non pris en charge ou en option dans votre environnement):

ldapwhoami -x -w "@secret" -D uid=max,ou=users,dc=company,dc=com -ZZ -H ldap://address.of.your.ldapserver/ 

Si l'utilisateur/pass combinaison est correcte, la réponse est retournée:

dn: uid = max, ou = utilisateurs, dc = entreprise, dc = com

Si la combinaison utilisateur/passe est incorrect, la réponse retournée est (en général):

(49) Pouvoirs non valides

Cela pourrait signifier, comme je l'ai dit, le mot de passe et/ou le nom d'utilisateur est erroné, l'utilisateur n'existe pas ou les listes de contrôle d'accès du serveur LDAP sont rompues de telle sorte que l'authentification n'est pas possible. Plus souvent qu'autrement, c'est le combo utilisateur/passe mal saisi, ou l'utilisateur n'existe pas. En conclusion, l'opération LDAPWhoAmI est une méthode très simple et très légère de validation des informations d'identification. Il fonctionne également via d'autres mécanismes (par exemple, Kerberos Single Sign-On, Digest-MD5, etc.).

+1

Le nom d'utilisateur et le mot de passe ne sont même pas envoyés dans le cadre de la demande 'WhoAmI'. Toute l'opération 'WhoAmi' est de vous dire à qui vous êtes actuellement lié. Il est donc absurde de dire qu'il «valide les informations d'identification de liaison soumises». Ce n'est pas le cas. Il les renvoie juste, ou plutôt juste le nom d'utilisateur. C'est l'étape * bind * qui fait la validation: elle seule est donc suffisante. Dans l'exemple donné, 'ldapwhoami' se lie d'abord, ce qui peut échouer avec' Invalid Credentials', puis exécute l'opération 'WhoAmI'. * N'importe quelle * opération LDAP aurait fait. Ce n'était pas forcément "WhoAmi". – EJP

Questions connexes