[php] Faire des recherches dans Active Directory

Faire des recherches dans Active Directory [php] - PHP - Programmation

Marsh Posté le 07-05-2003 à 09:29:19    

Salut ! :hello:  
 
 
Je veux faire des recherches dans Active Directory en utilisant PHP, via les fonctions LDAP.
 
 
En utilisant l'utilitaire Microsoft fourni sur le cd de Win2KS, ldp.exe, j'arrive à consulter les mecs qui sont dnas une Unité d'Organisation, mais en utilisant les même paramètres que ceux créer par ldp.exe, PHPH, ne me retourne aucun résultat  :??:  :??:  
 
Comment ça se fait ?? J'ai mis Apache sur la même machine que Win2KS, et à la connexion il me met aucune erreur ...
 
 
Ah oui, ya un truc bizarre, c'est que quand je passe par ldp.exe, je mets comme user Administrateur et, son passwd, mais dans PHP, quand je mets la même chose, il fait un Warning : Invalid credentials (c'est dans ldap_bind(...) ). Mais si je mets pas de mot de passe, alors ca marche  :pt1cable:  :pt1cable:  :pt1cable:  
 
Merci de me filer un coup de main !  :hello:  :hello:


Message édité par multani le 07-05-2003 à 09:29:36
Reply

Marsh Posté le 07-05-2003 à 09:29:19   

Reply

Marsh Posté le 07-05-2003 à 10:08:07    

:cry:

Reply

Marsh Posté le 07-05-2003 à 10:37:36    

:sweat:


Message édité par multani le 07-05-2003 à 10:41:09
Reply

Marsh Posté le 07-05-2003 à 11:36:40    

:heink:

Reply

Marsh Posté le 07-05-2003 à 13:10:01    

:pt1cable:

Reply

Marsh Posté le 07-05-2003 à 13:58:42    

:bounce:

Reply

Marsh Posté le 07-05-2003 à 14:23:27    

je fais un  [:kam7rsof]  pour te soutenir.
 
les infos sur LDAP sont difficiles à denicher. est ce que par hasard la methode d'authentification n'est pas la même via php (par defaut) ? genre du plain text ou du md5 ou... peut etre dois tu parametrer ça kke part  :??:

Reply

Marsh Posté le 07-05-2003 à 14:52:39    

genesis a écrit :

je fais un  [:kam7rsof]  pour te soutenir.
 
les infos sur LDAP sont difficiles à denicher. est ce que par hasard la methode d'authentification n'est pas la même via php (par defaut) ? genre du plain text ou du md5 ou... peut etre dois tu parametrer ça kke part  :??:  


 
je comprensd pas trop ce que tu m'expliques ...
 
la méthode d'autentification que j'ai trouvé dans ldp.exe ? ou une autre :whistle:  
 
et je suppose que qd tu parles de plain text ou md5, c'est pour le cryptage des infos que je passe ??  :D  
 
c'est pas gagné :sweat:  
 
Merci du UP  :hello:

Reply

Marsh Posté le 07-05-2003 à 15:02:46    

Multani a écrit :


 
je comprensd pas trop ce que tu m'expliques ...
 
la méthode d'autentification que j'ai trouvé dans ldp.exe ? ou une autre :whistle:  
 
et je suppose que qd tu parles de plain text ou md5, c'est pour le cryptage des infos que je passe ??  :D  
 
c'est pas gagné :sweat:  
 
Merci du UP  :hello:  


 
j'ai aussi du mal à comprendre ce que j'ai écris. je t'explique comment ca marche sur un serveur LDAP classique (pas du AD).
il y a differentes methode d'authentification qui dependent du cryptage du mot de passe, ca va de plain text à md5.
moi quand j'attaque mon serveur LDAP (en dotnet pas en php désolé :D ) je doit spécifier quelle methode d'encryptage est paramétré au niveau du serveur.
 
on doit probablement faire la meme chose avec AD. quand tu essayes de t'authentifier tu dois spécifier quelle est la methode d'encryptage parametrer au niveau de AD. Ce, afin de la respecter et de ne pas te manger un "invalid credentials".
 
c'est seulement une piste, mais je n'ai pas d'autres idée pour le moment.


Message édité par genesis le 09-05-2003 à 16:59:45
Reply

Marsh Posté le 07-05-2003 à 15:13:11    

Oki, je vois ce que tu veux dire ...
 
 
La grnde question est : comment je trouve la méthode de cryptage sur serveur Win2K :D ?

Reply

Marsh Posté le 07-05-2003 à 15:13:11   

Reply

Marsh Posté le 07-05-2003 à 15:14:24    

Multani a écrit :

Oki, je vois ce que tu veux dire ...
 
 
La grnde question est : comment je trouve la méthode de cryptage sur serveur Win2K :D ?


 
t'as plus qu'a demander sur S&R:
 
et je te repondrais :D

Reply

Marsh Posté le 07-05-2003 à 15:15:35    

Bon, ben si tout le monde est content :D

Reply

Marsh Posté le 07-05-2003 à 15:15:53    

Stagiaire power ....

Reply

Marsh Posté le 07-05-2003 à 15:27:05    

Multani a écrit :

Stagiaire power ....


 
t'es aussi stagiaire :D
 
tout ce que je peux te dire sur AD c'est qu'il utilise une securité kerberos.

Reply

Marsh Posté le 07-05-2003 à 15:44:51    

Ouais, j'ai vu ca quelque part ...
 
Et ca crypte comment kerberos (je suppose que ca doit crypter ... ?)

Reply

Marsh Posté le 07-05-2003 à 15:49:34    

Multani a écrit :

Ouais, j'ai vu ca quelque part ...
 
Et ca crypte comment kerberos (je suppose que ca doit crypter ... ?)


 
ben j'en sais fichtre rien !

Reply

Marsh Posté le 09-05-2003 à 00:42:28    

Multani a écrit :

Ouais, j'ai vu ca quelque part ...
 
Et ca crypte comment kerberos (je suppose que ca doit crypter ... ?)


uniquement en mode natif sinon ca cripte a la je ne sais quoi pour accepter les NT4

Reply

Marsh Posté le 09-05-2003 à 01:02:23    

[:drapo]
 
J'ai pas de réponses, mais c'est intéressant comme sujet :)  
Hésite pas à donner la soluce dès que tu l'as ;)

Reply

Marsh Posté le 09-05-2003 à 09:20:36    

Pour l'instant, la soluce va s'appeler ASP  :sweat: , ya de fortes chances ...

Reply

Marsh Posté le 09-05-2003 à 15:19:32    

:bounce:

Reply

Marsh Posté le 09-05-2003 à 15:49:59    

Hum c'est bizarre ton truc,
 
j'ai aussi eu a interfacer l'AD en Php pendant mon dernier stage ...
 
Et j'ai aussi tout d'abord utilisé les fonctions LDAP pour le faire, cela fonctionnait, mais avec des performances catastrophiques (requêtes très très longues à réaliser).
 
Du coup je suis passé à des connexions ADO directement sur les serveurs qui m'intéressaient, et là, hop, ça fonctionne niquel.
 
Si ça t'intéresse, je pourrais te retrouver le code en question, je dois avoir ça quelque part.
 
:)
:hello:
 
PS: Donc en gros, ce sont forcément tes requêtes qui sont mal construites  [:spamafote], t'aurais pas un exemple ?


Message édité par Notsukaw le 09-05-2003 à 15:51:26
Reply

Marsh Posté le 12-05-2003 à 11:20:11    

Ah ah, du nouveau ...
 
On a interrogé avec le même code que pour Active Directory, un annuaire OpenLDAP sous Linux, et la ça roule ... :heink:  
 
 
Et quand on essaie sous Windows, ya toujours 0 résultats ... :sweat:  
 
 
Notsukaw, tu pourrais nous dire comment tu configure ton serveur AD pour utiliser les requètes LDAP (on verra après pour ADO) ?
 
 :hello:

Reply

Marsh Posté le 13-05-2003 à 10:38:45    

T'en qu'à faire, si tu peux montrer ton code ADO :D

Reply

Marsh Posté le 13-05-2003 à 11:43:25    

:sweat:

Reply

Marsh Posté le 13-05-2003 à 17:20:49    

:pt1cable:

Reply

Marsh Posté le 13-05-2003 à 17:25:24    

je soutiens ton  [:kam7rsof]  
le sujet est interessant !

Reply

Marsh Posté le 13-05-2003 à 17:37:09    

genesis a écrit :

je soutiens ton  [:kam7rsof]  
le sujet est interessant !


 
apparement pas tant que ca ...
 
pétage de plomb tiens  :fou:

Reply

Marsh Posté le 14-05-2003 à 11:21:10    

up du matin (enfin, plutot midi ...) :heink:

Reply

Marsh Posté le 15-05-2003 à 12:30:51    

Code :
  1. /*********************************/
  2. /**** PARAMETRES DE CONNEXION ****/
  3. /*********************************/
  4. $server = "adresse_ip";
  5. $port = "389";
  6. $racine = "o=XXX, c=XXX";
  7. $rootdn = "user";
  8. $rootpw = "password";
  9. $dn = "OU=XXX, OU=XXX, DC=XXX";
  10. /*********************************/
  11. /*********************************/
  12. /******* INSTANCIATION ADO *******/
  13. /*********************************/
  14. $dbc = new COM("ADODB.Connection" ) or die("Impossible de démarrer ADO" );
  15. //Connexion Active Directory
  16. $dbc->Provider = "ADsDSOObject";
  17. $dbc->Open("", "$rootdn", "$rootpw" );
  18. //Tableau des résultats
  19. $rs = $dbc->Execute("<LDAP://$server/$dn>;(&(objectClass=XXX)(cn = XXX));cn, adspath, subTree" );
  20. $rs->fld0 = $rs->Fields(0);
  21. /*********************************/
  22. /*********************************/
  23. /***** PARCOURS DES RESULTATS ****/
  24. /*********************************/
  25. while(!rs->EOF){
  26. $rs->MoveNext(); //Déplacement du pointeur,sans affichage ...
  27. }
  28. /*********************************/


 
Donc voilà en gros comment ça fonctionne,
si vous avez des questions, je reste open :)
 
:hello:


---------------
[ Canon EOS 30D ] (Grip + Canon 50mm f/1.4 + Canon 18-55mm USM + Tamron 70-300mm Di LD Macro)  [Galerie perso]
Reply

Marsh Posté le 15-05-2003 à 17:03:54    

Eh eh, ca marche pas des masses.... :D
 
 
Quand je laisse le code comme ca (avec les variables modifiées qd même ...), j'ai une erreur sur

while(!rs->EOF){


 
Je l'ai donc viré pour voir le reste du code, des fois que rs soit vide et que du coup, la méthode EOF ne lui plaise pas.
 
 
Donc, sans rien touché d'autre, j'au une Internal Error (500) sur le Open apparement, mais si j'enlève la ligne correspondant au choix du Provider, et que je mets le provider dans le Open, comme ca


//$dbc->Provider = "ADsDSOObject" or die ("Imossible de Provider ..." );
$dbc->Open("ADsDSOObject", "$rootdn", "$rootpw" ) or die ("Impossible d'ouvrir la connexion." );


j'ai plus d'erreur #500, mais il me dit qu'il trouve pas le pilote ODBC ...
 

Warning: (null)(): Invoke() failed: Une exception s'est produite. Source: Microsoft OLE DB Provider for ODBC Drivers Description: [Microsoft][Gestionnaire de pilotes ODBC] Source de données non trouvée et nom de pilote non spécifié in ...


 
VOila, c'est super cool :sol:  :pt1cable:

Reply

Marsh Posté le 16-05-2003 à 09:31:55    

Hummmmmmmm bizarre tout ça ...
 
C'est quoi ton serveur web ?  :heink:


---------------
[ Canon EOS 30D ] (Grip + Canon 50mm f/1.4 + Canon 18-55mm USM + Tamron 70-300mm Di LD Macro)  [Galerie perso]
Reply

Marsh Posté le 16-05-2003 à 09:35:44    

Apache ...

Reply

Marsh Posté le 16-05-2003 à 09:36:56    

Tu l'as trouvé où ta doc sur tout ça ?
 
Faudrait que j'ai les résultats retournés par les méthodes, pour tester où ca foire, mais je trouve pas grand chose sur le Web  :cry:

Reply

Marsh Posté le 16-05-2003 à 11:18:51    

tu t'en sers pas de $racine dans ton code ?

Reply

Marsh Posté le 16-05-2003 à 14:00:20    

Hummm oué je vais revoir ça, j'ai dû faire une connerie sur ce code là et j'ai pas mon ancien sous la main :/
 
Sinon j'ai trouvé ce script:

Code :
  1. <?php
  2. // La séquence de base avec LDAP est  
  3. // connexion, liaison, recherche, interprétation du résultat
  4. // déconnexion
  5. echo "<h3>requête de test de LDAP</h3>";
  6. echo "Connexion ...";
  7. $ds=ldap_connect("localhost" );  // doit être un serveur LDAP valide!
  8. echo "Le résultat de connexion est ".$ds."<p>";
  9. if ($ds) {
  10.     echo "Liaison ...";
  11.     $r=ldap_bind($ds);     // this is an "anonymous" bind, typically
  12.                            // read-only access
  13.     echo "Le résultat de connexion est ".$r."<p>";
  14.     echo "Recherchons (sn=S*) ...";
  15.     // Recherche par nom
  16.     $sr=ldap_search($ds,"o=My Company, c=US", "sn=S*" ); 
  17.     echo "Le résultat de la recherche est ".$sr."<p>";
  18.     echo "Le nombre d'entrées retournées est ".ldap_count_entries($ds,$sr)."<p>";
  19.     echo "Lecture des entrées ...<p>";
  20.     $info = ldap_get_entries($ds, $sr);
  21.     echo "Données pour ".$info["count"]." entrées:<p>";
  22.     for ($i=0; $i<$info["count"]; $i++) {
  23.         echo "dn est : ". $info[$i]["dn"] ."<br>";
  24.         echo "premiere entree cn : ". $info[$i]["cn"][0] ."<br>";
  25.         echo "premier email : ". $info[$i]["mail"][0] ."<p>";
  26.     }
  27.     echo "Fermeture de la connexion";
  28.     ldap_close($ds);
  29. } else {
  30.     echo "<h4>Impossible de se connecter au serveur LDAP.</h4>";
  31. }
  32. ?>


 
Sans ADO même si tu as déjà testé
 
 [:spamafote]


---------------
[ Canon EOS 30D ] (Grip + Canon 50mm f/1.4 + Canon 18-55mm USM + Tamron 70-300mm Di LD Macro)  [Galerie perso]
Reply

Marsh Posté le 16-05-2003 à 15:00:51    

Ouais, ca c'est les exemples classiques, qu'on trouve sur le web ....
 
Mais bon, merci ...  :hello:  
 
Je crois qu'on a trouvé la solution au problème avec LDAP  :sol:  (sans passer par ADO) : pour faire le bind, il faut passer dans le nom de l'utilisateur le nom du domaine sur lequel on veut se connecter ...
 
Le code devient donc :

Code :
  1. <pre>
  2. <?php
  3. $user_dn = "test02@dst38000.local";
  4. $server = "1st38000.dst38000.local";
  5. $passwd = ...; // mot de passe
  6. if ( !($conn = ldap_connect($server)) )
  7. {
  8. echo "Impossible de se connecter au serveur $server.\n";
  9. exit;
  10. }
  11. if ( !($bind = ldap_bind($conn, $user_dn,$passwd)) )
  12. {
  13. echo "Impossible de se lier au serveur an tant que $user_dn.\n";
  14. echo "Mot de passe incorrect.\n";
  15. exit;
  16. }
  17. $res = ldap_search($conn,"OU=test,dc=DST38000,dc=local", "(cn=*)",array("cn" ));
  18. $nb = ldap_count_entries($conn, $res);
  19. echo "Le nombre d'entrées retournées est $nb.\n";
  20. $info = ldap_get_entries($conn, $res);
  21. echo "\nDonnées lues : \n";
  22. echo "------------------------\n";
  23. for ($i=0; $i<$info["count"]; $i++)
  24. {
  25. echo $info[$i]['cn'][0]."\n";
  26. }
  27. echo "------------------------";
  28. ?>
  29. </pre>


 
 
Et voilà, le secret résidait dans le user_dn, en précisant dans quel domaine il agissait ..., c'est à dire dans l'exemple, il suffisait d'ajouter @DST38000.local, pour que tout roule :) (ca fait qd même 2 semaines qu'on cherchait :) )
 
 
Vouala quoi, on va pouvoir s'amuser maintenant, à faire des requètes de ouf, .... enfin bref  :wahoo:  
 
Si jamais ca intéresse du monde, je pourrais founir les perfs de requètes (à priori, ca à pas l'air de ramer plus que ca  ...)

Reply

Marsh Posté le 17-05-2003 à 11:45:18    

Oui les perfs ça m'intéressé :hello:
 
Parce que franchement quand j'ai essayé c'était pas concluant du tout :/
Du style pour avoir les 700 résultats d'une requête il me fallait bien 10/15 sec, alors qu'en ADO c'était quasi-instantanné  [:spamafote]  
 


---------------
[ Canon EOS 30D ] (Grip + Canon 50mm f/1.4 + Canon 18-55mm USM + Tamron 70-300mm Di LD Macro)  [Galerie perso]
Reply

Marsh Posté le 19-05-2003 à 09:43:24    

D'ac, je te dirais ca ... C'est qd tu consultais les Users ?
 
 
Si tu faisais des ajouts dans AD, tu ajoutais quoi ? des users (surement ...), mais des UO ?
 
Merci  :hello:

Reply

Marsh Posté le 25-05-2003 à 02:50:22    

Multani a écrit :

D'ac, je te dirais ca ... C'est qd tu consultais les Users ?
 
 
Si tu faisais des ajouts dans AD, tu ajoutais quoi ? des users (surement ...), mais des UO ?
 
Merci  :hello:  


 
Nan, c'était pour consulter les postes servis des agences bancaires du réseau.
 
Et je faisais uniquement de la consultation, pas le droit d'aller toucher à l'AD :D ils avaient peur que je vire leur 5000 comptes machine ou quoi ? :lol:


---------------
[ Canon EOS 30D ] (Grip + Canon 50mm f/1.4 + Canon 18-55mm USM + Tamron 70-300mm Di LD Macro)  [Galerie perso]
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed