Je cherche un moyen d'authentifier les utilisateurs via LDAP avec PHP (avec Active Directory en tant que fournisseur). Idéalement, il devrait pouvoir fonctionner sur IIS 7 ( adLDAP le fait sur Apache). Quelqu'un avait-il fait quelque chose de similaire, avec succès?
- Edit: Je préfère une bibliothèque / classe avec du code prêt à l'emploi ... Ce serait idiot d'inventer la roue quand quelqu'un l'a déjà fait.
Réponses:
Importer une bibliothèque entière semble inefficace lorsque tout ce dont vous avez besoin est essentiellement de deux lignes de code ...
la source
ldap_set_option
pour le faire se comporter d'une manière différente. Peut-être définir la version du protocole? Vous devrez expérimenter. Je vous suggère personnellement de vérifier quand même si un mot de passe est vide, juste pour être sûr.ldap_bind
serait le traitement et les caractères spéciaux ne sont pas un problème.On pourrait penser que simplement authentifier un utilisateur dans Active Directory serait un processus assez simple utilisant LDAP en PHP sans avoir besoin d'une bibliothèque. Mais il y a beaucoup de choses qui peuvent le compliquer assez rapidement:
Il est en fait plus facile dans la plupart des cas d'utiliser une bibliothèque LDAP prenant en charge ce qui précède. J'ai finalement roulé ma propre bibliothèque qui gère tous les points ci-dessus: LdapTools (Eh bien, pas seulement pour l'authentification, il peut faire beaucoup plus). Il peut être utilisé comme suit:
L'appel d'authentification ci-dessus:
Il existe également d'autres bibliothèques pour le faire (comme Adldap2). Cependant, je me suis senti suffisamment obligé de fournir des informations supplémentaires car la réponse la plus votée est en fait un risque de sécurité sur lequel s'appuyer sans aucune validation d'entrée effectuée et sans utiliser TLS.
la source
ldaps://
format pour la connexion est obsolète. Dans mon exemple, lorsque vous spécifiez,setUseTls(true)
il utilise leldap://
format, puis émet un StartTLS en utilisantldap_start_tls($connection)
. Donc TLS lui-même n'est pas obsolète, il suffit de se connecter en utilisantldaps://
(qui se connecte en fait à LDAP via un port complètement différent).Je fais cela simplement en passant les informations d'identification de l'utilisateur à ldap_bind ().
http://php.net/manual/en/function.ldap-bind.php
Si le compte peut se lier à LDAP, il est valide; s'il ne peut pas, ce n'est pas le cas. Si tout ce que vous faites est l'authentification (pas la gestion de compte), je ne vois pas la nécessité d'une bibliothèque.
la source
J'aime la classe Zend_Ldap , vous ne pouvez utiliser que cette classe dans votre projet, sans Zend Framework.
la source
PHP a des bibliothèques: http://ca.php.net/ldap
PEAR propose également un certain nombre de packages: http://pear.php.net/search.php?q=ldap&in=packages&x=0&y=0
Je n'ai pas utilisé non plus, mais j'allais le faire à un moment donné et ils semblaient devoir fonctionner.
la source
Pour ceux qui recherchent un exemple complet, consultez http://www.exchangecore.com/blog/how-use-ldap-active-directory-authentication-php/ .
J'ai testé cette connexion aux contrôleurs de domaine Windows Server 2003 et Windows Server 2008 R2 à partir d'un serveur Web Windows Server 2003 (IIS6) et d'une entreprise Windows Server 2012 exécutant IIS 8.
la source