Php + ldap sur active directory [Résolu/Fermé]

Signaler
-
 megs -
Bonjour,

je suis entrain de créer un Intranet avec une identification de l'utilisateur via l'Active Directory mais j'ai un problème lors de la connection ... si quelqu'un pouvait m'aider ;)

<?php 
$server = "localhost";
$rootdn = "cn=Administrateur, o=eabjm, c com"; 
$rootpw = "passwd"; 
$ds=ldap_connect($server);  
if ($ds) {
    $r=ldap_bind($ds,$rootdn,$rootpw);
    // données à comparer
    $dn="cn=Pillou Jean-Francois, o=eabjm,c=com";
    $valeur="MonMot2Passe";
    $attribut="password";
    // Comparaison 
    $resultat=ldap_compare($ds, $dn, $attribut, $valeur);
    if ($resultat == -1) {
		echo "Erreur:".ldap_error($ds);
	}elseif ($resultat == TRUE) {
		echo "Le mot de passe est correct";
	}else{
 		echo "Le mot de passe est erronné...";
 	}
    ldap_close($ds);
} else {
    echo "Connexion au serveur LDAP impossible"; 
}
?>

et voila le message d'erreur :

Warning: LDAP: Unable to bind to server: Invalid credentials in d:\www\eleves\index.php on line 17

Warning: LDAP: Compare operation could not be completed: No such attribute in d:\www\eleves\index.php on line 23
Erreur:No such attribute 

j'ai tourner dans tous les sens le prob je cherche sur internet mais je trouve rien ...

Merci d'avance pour votre aide ;)

12 réponses

As-tu regardé ce site :

http://www.sunyday.net/article-authentification-PHP-active-directory.html

Ca marche pour moi!
Pin[o]t
2
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60511 internautes nous ont dit merci ce mois-ci

merci ;)

la ligne 17 c'est :

$r=ldap_bind($ds,$rootdn,$rootpw);


alors je me dit que j'ai un problème d'identification ... mais je comprend pas pourquoi ... je viens d'essayer de me connecter avec un soft sur l'active directory et ca ne fonctionne pas non plus ...

il manque un egal sur la ligne (mais c uniquement sur le forum) :
$rootdn = "cn=Administrateur, o=eabjm, c com"; 


sinon le script je les recuperer ici : http://www.commentcamarche.net/php/phpldap.php3 ;)

merci ;)
Messages postés
515
Date d'inscription
lundi 18 octobre 2004
Statut
Membre
Dernière intervention
28 février 2007
121
Invalid credentials, c'est un probleme de droits d'accès, ca je pense.
Essaie de mettre l'utilisateur IUSR_nomdetamachine dans le groupe administrateurs pour voir (a ne pas garder comme ca, c'est une enorme faille de sécurité, c'est vraiment juste pour voir)
Mais si avec ton soft tu n'arrives pas a te connecter et que tu es administrateur, là y'a un souci...
Messages postés
515
Date d'inscription
lundi 18 octobre 2004
Statut
Membre
Dernière intervention
28 février 2007
121
Heuuu... Les lignes correspondent ?
La ligne 17, c'est laquelle ?
Enfin moi ca m'interesse ton script.
Je viens justement de faire des recherches la dessus :
http://forums.devshed.com/archive/t-168470/PHP-Active-Directory-and-LDAP-Referrals
avec le soft ca fonctionne ;) (ldap browser)

mais pas avec le php ... grrrr si je trouve je te fais signe et si tu as une idee n'hesite pas ;) merci
Messages postés
515
Date d'inscription
lundi 18 octobre 2004
Statut
Membre
Dernière intervention
28 février 2007
121
http://php.morva.net/manual/en/function.ldap-bind.php
Ca pourra ptet t'aider si tu y'es pas deja passé...
re ;)

bon j'arrive a me connecter a l'active directory ... ca c'est fait ;)

mais maintenant j'ai un probleme sur : ldap_compare()

voici mon code :
<? 
$ldaprdn  = 'ldap';   // user
$ldappass = 'mdp';  // password
// connect to ldap server
$ldapconn = ldap_connect("serveur.eabjm.com")
   or die("Could not connect to LDAP server.");
if ($ldapconn) {
   // binding to ldap server
   @$ldapbind = ldap_bind($ldapconn, $ldaprdn, $ldappass);
   // verify binding
   if ($ldapbind) {
       echo "Connexion LDAP ... OK<br>";
	   // preparation des données
	   $dn="cn=test, o=eabjm,c=com";
	   $valeur="test";
	   $attribut="password";
	   // Comparaison du mot de passe à celui dans l'annuaire
	   $resultat=ldap_compare($ldapconn, $dn, $attribut, $valeur);
	   if ($resultat == -1) {
	   	  echo "Erreur : ".ldap_error($ldapconn);
	   }else if ($resultat == TRUE){
	   	  echo "Le mot de passe est correct";
	   }else{
	   	  echo "Le mot de passe est erronné...";
	   }
       ldap_close($ldapconn);
   } else {
       echo "Connexion LDAP ... ECHEC";
   }
} 
?>


L'erreur affichée est la suivante :
Warning: LDAP: Compare operation could not be completed: No such attribute in d:\www\eleves\index.php on line 30

La ligne 30 est la suivante :
$resultat=ldap_compare($ldapconn, $dn, $attribut, $valeur);


Merci d'avance pour l'aide ;)
si quelqu'un a une idee n'hesiter pas ;)
Utilisateur anonyme
Bonjour neo.t
si tu as un peu de temps à m'accorder :
peux-tu m'aiguiller sur l'installation du module ldap (moi je n'arrive même pas à me connecter!). J'ai coché l'extension php_ldap et copié les 2 fichiers .dll vers sytem32, mais impossible de télécharger les fameux modules de l'University of Michigan

Merci d'avance
Re ;)

personne n'a d'idee ??? bon bas enfin si vous avez une idee meme si elle vous parrait pas super dite moi tjs ;)

merci

a+
sur mon serveur IIs et LDAP sous unix,le bind est inutile , essaye
En fait il y a même une release sur ce site ( en anglais ?! ) : http://phpad.sunyday.net

ça porte bien son nom, PHP et AD ;o)

Good luck.
Désolé pour la réponse tardive, j'ai eu le même problème de connection à l'active directory en LDAP.

Essaye avec le compte "CN=Administrateur,CN=Users,DC=example,DC=com"
(En remplaçant bien évidemment "example" et "com" par ton domain AD)


A+
je ne suis pas sûr de ma réponse, et tardive en plus mais bon c'est de circonstance:

- pour changer un mot de passe ou même l'email via ldap, même en se connectant avec l'utilisateur lui même ca ne marche pas. il faut que l'utilisateur soit du groupe administrateur, ou qu'il ai une délégation de pouvoir sur les attributs demandés dans l'arborescence AD choisi. et quand bien même je trouve plus sécure de ne pas donner à un compte utiliser sur une page web des droits de modification du mot de passe alors que l'user lui même peut le faire aisément et de façon sécurisé =Ctrl+Alt+Suppr-> changement de mot de passe.

- pour les autres données perso, ca se discute en fonction des besoins.

En bref pour tester si un compte existe et l'utilisateur est authentifié, il suffit de se connecter à AD/LDAP avec le login et mot de passe quye fournit l'utilisateur, si echec.. pas de login.. c'est tres simple et ca ne compromet pas des compte d'administration.

Ldap permet avec les droits user, de LIRE la plupart des attributs utiles, de dn, le cn etc..., quand a la partie écriture il faut faire une délégation à un compte restreint spécifique, dont le login et le mot de passe n'apparaissent nul par en clair dans le code de la page web.. même php (ou crypté, et pas uniquement base64, un second level de cryptage perso est conseillé, en include dans une CLASS porte clé qui décrypte les données de connexion de la délégation à la demande).