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).

Qu’est-ce que LDAP ?

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
        )
 
)

About this entry