ZeFLIP.com

Intégration Active Directory

Après trois jours de recherche, j'ai enfin réussi à créer un utilisateur sur Active Directory à travers PHP grace à un mélange de différentes technologies.

Pages de l'article :

  1. LDAP
  2. L'objet COM

LDAP

Après trois jours de recherche, j'ai enfin réussi à créer un utilisateur sur Active Directory à travers PHP grace à un mélange de différentes technologies.

La première option étudiée était la connexion LDAP (c.f. http://fr.php.net/manual/fr/ref.ldap.php).
Cela m'a tout d'abord permit de créer l'utilisateur :

<?php
$ad = ldap_connect(server);
ldap_set_option($ad, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_bind($ad,$admin_username,$admin_password);
$user_dn = 'cn=user,ou=test,dc=domain,dc=com';
$user_data = array();
  $user_data['samaccountname'] = array($new_username);
  $user_data['sn'] = array($new_surname);
  $user_data['givenname'] = array($new_firstname);
  $user_data['displayname'] = array($new_firstname . ' ' . $new_surname);
  $user_data['objectclass'] = array(0 => 'top', 1 => 'person', 2 => 'organizationalPerson', 3 => 'user');
ldap_add($ad,$user_dn,$user_data);
ldap_unbind($ad);
?>

et de le supprimer :

<?php
$ad = ldap_connect(server);
ldap_set_option($ad, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_bind($ad,$admin_username,$admin_password);
$user_dn = 'cn=user,ou=test,dc=domain,dc=com';
ldap_delete($ad,$user_dn);
ldap_unbind($ad);
?>
 

Une fois l'utilisateur créé, je me suis tout de même retrouvé confronté à deux problèmes:

  • définir le mot de passe de l'utilisateur
  • activer l'utilisateur (par défaut il est inactif !)

Logiquement, ça devrait donner ça :

<?php
$ad = ldap_connect(server);
ldap_set_option($ad, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_bind($ad,$admin_username,$admin_password);
$user_dn = 'cn=user,ou=test,dc=domain,dc=com';
 
// Activation
$user_data = array();
  $user_data["useraccountcontrol"] = array(512);
ldap_modify($ad, $user_dn, $user_data);
 
// Définition du mot de passe
$user_data = array();
  $user_data["unicodepwd"] = array($new_password);
ldap_modify($ad, $user_dn, $user_data);
 
ldap_unbind($ad);
?>

Mais ça ne marche pas!!! (En fait, il faut impérativement activer le SSL sur le serveur Active Directory et sur le serveur PHP afin qu'ils puissent dialoguer de manière plus sécurisée...)
Je me suis donc tourné vers les objets COM (ADSI)

L'objet COM

L'un des avantages de travailler sur un serveur PHP tournant sous Windows est de pouvoir faire appel aux composant COM inhérent au système d'exploitation.
J'ai donc la possiblité d'ouvrir et de travailler avec le composant ADSI (Active Directory Service Interface).
Et là, magique : plus besoin de SSL / LDAPS :

<?php
// Pour activer le compte
$ADSI = new COM("LDAP:");
$user_dn = 'cn=user,ou=test,dc=domain,dc=com';
$user = $ADSI->OpenDSObject("LDAP://".$server."/".$user_dn, $admin_username, $admin_password, 1);
$user->AccountDisabled = false;
$user->SetInfo();
unset ($user);
unset ($ADSI);
 
// Pour définir le mot de passe
$ADSI = new COM("LDAP:");
$user_dn = 'cn=user,ou=test,dc=domain,dc=com';
$user = $ADSI->OpenDSObject("LDAP://".$server."/".$user_dn, $admin_username, $admin_password, 1);
$user->SetPassword($user_password);
$user->SetInfo();
unset ($user);
unset ($ADSI);
?>

Pages de l'article :

  1. LDAP
  2. L'objet COM

Publié le 04-10-06 par Erwann Penet dans Solutions Internet Extranet Intranet ::: Lien permanent


Warning: filemtime() [function.filemtime]: stat failed for /home/zeflip/www/manager/cache/default/cachedata_art_7_2a3bdb9da5389419f2cd15f7bbf83d88default in /home/zeflip/www/manager/extinc/class.coolcache.php on line 227