Je cherche un moyen d'authentifier les utilisateurs via LDAP avec PHP (avec Active Directory en tant que fournisseur). Idéalement, il devrait pouvoir s'exécuter sur IIS = 7 ( adLDAP le fait sur Apache). Quiconque avait fait quelque chose de similaire, avec succès?
Importer une bibliothèque entière semble inefficace alors qu'il ne vous faut que deux lignes de code ...
$ldap = ldap_connect("ldap.example.com");
if ($bind = ldap_bind($ldap, $_POST['username'], $_POST['password'])) {
// log them in!
} else {
// error message
}
On pourrait penser que la simple authentification d'un utilisateur dans Active Directory serait un processus assez simple utilisant LDAP dans PHP sans avoir besoin d'une bibliothèque. Cependant, beaucoup de choses 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 fini par lancer ma propre bibliothèque qui gère tous les points ci-dessus: LdapTools (Enfin, pas seulement pour l'authentification, cela peut faire beaucoup plus). Il peut être utilisé comme suit:
use LdapTools\Configuration;
use LdapTools\DomainConfiguration;
use LdapTools\LdapManager;
$domain = (new DomainConfiguration('example.com'))
->setUsername('username') # A separate AD service account used by your app
->setPassword('password')
->setServers(['dc1', 'dc2', 'dc3'])
->setUseTls(true);
$config = new Configuration($domain);
$ldap = new LdapManager($config);
if (!$ldap->authenticate($username, $password, $message)) {
echo "Error: $message";
} else {
// Do something...
}
L’appel d’authentification ci-dessus va:
Il existe d'autres bibliothèques pour le faire aussi (comme Adldap2). Cependant, je me suis senti contraint de fournir des informations supplémentaires, car la réponse la plus votée est en réalité un risque de sécurité sur lequel on ne peut compter que si aucune entrée n’est validée et que TLS n’est pas utilisé.
Je le fais simplement en transmettant 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. si ça ne peut pas, ça ne l'est pas. Si vous ne faites que de l’authentification (et non de la gestion de compte), je ne vois pas le besoin d’une bibliothèque.
J'aime la classe Zend_Ldap , vous ne pouvez utiliser que cette classe dans votre projet, sans le Zend Framework.
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=
Je n'ai pas utilisé non plus, mais j'y allais à un moment donné et ils semblaient devoir travailler.
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.