Synchronisation Active Directory
< Technique | PHP | Scripts
Sauter à la navigation
Sauter à la recherche
Révision datée du 20 septembre 2019 à 08:15 par Jordan (discussion | contributions) (Page créée avec « ==Présentation== Cette page a pour objet de présenter un script PHP permettant de se connecter à un Active Directory pour y récupérer une liste d'utilisateurs sous fo... »)
Présentation
Cette page a pour objet de présenter un script PHP permettant de se connecter à un Active Directory pour y récupérer une liste d'utilisateurs sous forme de tableau.
get_ADusers.php
Ce script, pouvant se nommer get_ADusers.php
, contient, à ce jour, le contenu suivant :
<?php
function get_ADusers(array $ADgroups = array())
{
/////////////////////////////////////////////////////////////////
// Cette fonction a pour but de retourner une liste //
// d'utilisateurs sous forme d'un tableau (array) $users //
// //
// Cette fonction prend en argument la liste des groupes sous //
// forme d'un tableau (array) $ADgroups //
// //
// Cette fonction va interroger l'Active Directory et //
// rechercher les utilisateurs appartenants aux groupes donnés //
/////////////////////////////////////////////////////////////////
///////////////////////////////
// Déclaration des variables //
///////////////////////////////
// Variable contenant la liste des utilisateurs à retourner
$users = array();
//////////////////////////////////////
// Fin de déclaration des variables //
//////////////////////////////////////
////////////////
// Paramètres //
////////////////
// Serveur AD
$ADserver = 'ldap://myADserver.myDomain.com';
// Port du serveur AD
$ADport = '389';
// Utilisateur autorisé à interroger l'AD
$ADuser = 'CN=myQueryADuser,OU=AppUsers,OU=Users,DC=myDomain,DC=com';
// Mot de passe de l'utilisateur autorisé à interroger l'AD
$ADpassword = 'xxxxxxxxxxxxxx';
// Branche de base de l'AD à partir de laquelle faire la recherche
$ADbaseDN = 'DC=myDomain,DC=com';
////////////////////////
// Fin des paramètres //
////////////////////////
/////////////////////////
// Recherche dans l'AD //
/////////////////////////
// Construction du filtre de recherche de l'AD
// Si qu'un seul groupe défini
if (count($ADgroups) == 1)
// Définition d'un filtre unique
$ADfilter = "(cn=$ADgroups[0])";
// Sinon, si plusieurs groupes définis
elseif (count($ADgroups) > 1)
{
// Définition d'un filtre multiple
$ADfilter = "(|";
foreach ($ADgroups as $group)
$ADfilter .= "(cn=$group)";
$ADfilter .= ")";
}
// Connexion à l'AD
$ADcnx = ldap_connect($ADserver);
// Définition des options de la connexion à l'AD
ldap_set_option($ADcnx, LDAP_OPT_REFERRALS, 0);
ldap_set_option($ADcnx, LDAP_OPT_PROTOCOL_VERSION, 3);
// Authentification sur l'AD
$ADauth = ldap_bind($ADcnx, $ADuser, $ADpassword);
// Construction de la requête de recherche
$ADquery = ldap_search($ADcnx, $ADbaseDN, $ADfilter);
// Interrogation et récupération des résultats
$ADresults = ldap_get_entries($ADcnx, $ADquery);
///////////////////////////////////
// Fin de la recherche dans l'AD //
///////////////////////////////////
//////////////////////////////
// Traitement des résultats //
//////////////////////////////
// Si la recherche a retouné au moins 1 résultat
if ($ADresults["count"] > 0)
{
// Variable contenant la liste des utilisateurs récupérés depuis l'AD
$ADusers = array();
// Pour chaque résultat
for ($i=0; $i<$ADresults["count"]; $i++)
// Si le résultat a une section "membre"
if (!empty($ADresults[$i]["member"]))
// Pour chaque membre
for ($j=0; $j<$ADresults[$i]["member"]["count"]; $j++)
// Enregistrement de l'utilisateur récupéré depuis l'AD
$ADusers[]=$ADresults[$i]["member"][$j];
// Astuce pour supprimer les doublons et réorganiser l'index du tableau
$ADusers = array_values(array_unique($ADusers));
// Pour chaque utilisateur récupéré de l'AD
foreach($ADusers as $ADuserDN)
{
// Initialisation du tableau contenant les informations de l'utilisateur
$user = array();
// Construction du filtre de recherche de l'AD
$ADfilter = "(distinguishedName=$ADuserDN)";
// Construction de la requête de recherche
$ADquery = ldap_search($ADcnx, $ADbaseDN, $ADfilter);
// Interrogation et récupération des résultats
$ADresults = ldap_get_entries($ADcnx, $ADquery);
// Si la recherche a retourné un résultat
if (!empty($ADresults))
// Si la recherche a retourne un unique résultat
if ($ADresults["count"] == 1)
{
// Initialisation d'un tableau pour mettre en minuscule les clés.
// En effet, bien que Windows soit insensible à la casse, PHP, quant
// à lui, ne l'est pas. Certaines désignations d'attribut sont en minuscules
// alors que d'autres comportent des majuscules (exemple : displayname et displayName)
// Pour pallier cette situation, ce script va mettre toutes les désignations (clés)
// en minuscules.
$ADlowercaseResults = array();
// Pour chaque résultat de la recherche
foreach($ADresults[0] as $key => $value)
// Création d'une clé en minuscule depuis le résultat
$ADlowercaseResults[strtolower($key)] = $value;
// Alimentation de la variable $user avec les différentes informations de l'AD
// Il est possible de rajouter autant d'information que disponible
if (isset($ADlowercaseResults['cn']))
$user['cn'] = $ADlowercaseResults['cn'][0];
if (isset($ADlowercaseResults['company']))
$user['company'] = $ADlowercaseResults['company'][0];
if (isset($ADlowercaseResults['department']))
$user['department'] = $ADlowercaseResults['department'][0];
if (isset($ADlowercaseResults['displayname']))
$user['displayname'] = $ADlowercaseResults['displayname'][0];
if (isset($ADlowercaseResults['givenname']))
$user['surname'] = $ADlowercaseResults['givenname'][0];
if (isset($ADlowercaseResults['mail']))
$user['mail'] = $ADlowercaseResults['mail'][0];
if (isset($ADlowercaseResults['manager']))
$user['manager'] = $ADlowercaseResults['manager'][0];
if (isset($ADlowercaseResults['msexchuserculture']))
$user['language'] = $ADlowercaseResults['msexchuserculture'][0];
if (isset($ADlowercaseResults['sn']))
$user['name'] = $ADlowercaseResults['sn'][0];
if (isset($ADlowercaseResults['title']))
$user['title'] = $ADlowercaseResults['title'][0];
//if (isset($ADlowercaseResults['thumbnailphoto']))
// $user['thumbnailPhoto'] = $ADlowercaseResults['thumbnailphoto'][0];
// Une fois les informations récupérées, ajout de l'utilisateur à la liste à retourner
$users[] = $user;
}
}
}
/////////////////////////////////////
// Fin du traitement des résultats //
/////////////////////////////////////
// Fermeture de la connexion à l'AD
ldap_close($ADcnx);
// Retour de la liste des utilisateurs
return $users;
}
?>