Se connecter à un Active Directory avec PHP
Aujourd’hui nous allons voir comment faire une authentification avec PHP sur une un Active Directory LDAP (AD).
Le code a été testé avec Windows 2003 server.
Tout d’abord, votre serveur a besoin de la connexion LDAP standard sur le port 389, normalement il est activé pour une création d’AD par défaut.
Votre serveur LAMP / WAMP a besoin aussi de l’extension php_ldap.
J’utilise les fonctions de php pour faire la connexion et l’authentification.
Dans un premier temps, faire la connexion au serveur AD :
$host = "my.server.host.com"; //Récupérer les informations d'authentification par un formulaire de login $myLogin = $_POST["loginAD"]; $myPass = $_POST["passAD"]; $ressource = ldap_connect($host);
PHP va se connecter au serveur sur le port 389, vous avez ensuite besoin de vous authentifier avec un utilisateur AD afin de récupérer toutes les informations le concernant.
if($ressource){ try{ //Authentification à l'AD avec un login / password Windows $bind = ldap_bind($ressource, $myLogin."@".$host, $myPass); /** **Pour récupérer toutes les informations il est nécessaire d'être loggué **Il exist un mode anonyme pour tester la simple connexion au serveur **Maintenant nous pouvons récupérer les informations de l'utilisateur */ //$dn contient les informations demandées par Windows server pour parcourir la bonne arborescence AD. //Ici je veux parcourir tous les utilisateurs de l'arboresence AD $dn = "CN=Users,DC=my,DC=server, DC=host,DC=com"; /*Je recherche l'email, les groupes d'appartenance et le nom de l'utilisateur *Il est possible de récupérer beaucoup d'informations concernant un utilisateur AD, *Vous pouvez les récupérer en enlevant le dernier argument de la fonction de recherche ldap_search */ $result = ldap_search($ressource, $dn, "samaccountname=".$myLogin, array("mail", "memberof","name")); //ldap_get_entries va retourner un tableau avec les informations demandées $info = ldap_get_entries($ressource, $result); echo " <pre>".print_r($info, true); }catch(Exception $e){ echo $e->getMessage(); }
Je récupère ce résultat :
Array
(
[count] => 1
[0] => Array
(
[memberof] => Array
(
[count] => 1
[0] => CN=Administrators,CN=Builtin,DC=my,DC=server,DC=host,DC=com
)
[0] => memberof
[name] => Array
(
[count] =>1
[0] => Userfirstname Userlastname
)
[1] => name
[mail] => Array
(
[count] => 1
[0] => user@host.com
)
[2] => mail
[count] => 3
[dn] => CN=Userfirstname Userlastname,CN=Users,DC=my,DC=server,DC=host,DC=com
)
)

3 Comments
Jump to comment form | comments rss [?] | trackback uri [?]