Si vous arrivez ici, c’est que sans doute vous avez comme moi cherché sur Internet comment effectuer une authentification en LDAP sur une base Active Directory, en PHP. Difficile car on trouve beaucoup de bruit avec ces termes !
Voici ce que j’ai fini par écrire. Le principe essentiel est d’effectuer une recherche du DN, puis de re-effectuer un « ldap_bind ». Si cela ne fonctionne pas dans votre cas, faites le moi savoir via les commentaires!
Le petit bout de code:
// modify these values define("LDAP_HOSTNAME","192.168.0.10"); // LDAP server define("LDAP_DN", "DC=xx,DC=yy,DC=zz"); // LDAP DN define("LDAP_CN", "admin"); // LDAP admin name define("LDAP_CN_PASS", "password"); // LDAP admin password function LDAP_identify( $login, $password) { $ldaprdn = 'CN='.LDAP_CN.",CN=Users,".LDAP_DN; // DN ou RDN LDAP $ldappass = LDAP_CN_PASS; // admin password $ld = ldap_connect( LDAP_HOSTNAME); if (!$ld) { echo "Can't connect on LDAP server"; return false; } ldap_set_option($ld, LDAP_OPT_PROTOCOL_VERSION, 3); ldap_set_option($ld, LDAP_OPT_REFERRALS, 0); if (!ldap_bind( $ld, $ldaprdn, $ldappass)) { echo "Can't identify on LDAP server"; ldap_close( $ld); return false; } $r=ldap_search($ld, LDAP_DN, "(sAMAccountName=$login)"); $info = ldap_get_entries( $ld, $r); if ($info) { /* ** If you want to get some info $id = $fullName = $mail = ''; if (isset($info[0]['sn'])) $id =$info[0]['sn'][0]; if (isset($info[0]['cn'])) $fullName =$info[0]['cn'][0]; if (isset($info[0]['mail'])) $mail =$info[0]['mail'][0]; */ $DN = ''; if (isset($info[0]['dn'])) $DN =$info[0]['dn']; // Active Directory accept empty password !? $password = trim($password); if (empty($password) || empty($DN) || !ldap_bind( $ld, $DN, $password)) { echo "Erreur d'identification"; ldap_close( $ld); return false; } // here, you're identified ldap_close($ld); return true; } ldap_close( $ld); return false; }
1 commentaire
djidji · 4 juillet 2009 à 23 h 45 min
bonsoir a vous merci pour ce code qui est très intéressant.moi j’ai un problème en ce qui concerne l’ajout des utilisateurs dans active directory est ce que vous pouvez m’aider sur le code d’ajout car sur internet j’ai trouvé des codes qui n’ajoutent qu’un seul utilisateur.moi je veux ajouter plusieurs c’est a dire sous forme d’un formulaire.merci j’attends votre réponse car j’ai du reporter ma soutenance a cause de ça.