Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2535 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [php] Faire des recherches dans Active Directory

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[php] Faire des recherches dans Active Directory

n°385450
multani
Dépressionnisé
Posté le 07-05-2003 à 09:29:19  profilanswer
 

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
mood
Publicité
Posté le 07-05-2003 à 09:29:19  profilanswer
 

n°385493
multani
Dépressionnisé
Posté le 07-05-2003 à 10:08:07  profilanswer
 

:cry:

n°385521
multani
Dépressionnisé
Posté le 07-05-2003 à 10:37:36  profilanswer
 

:sweat:


Message édité par multani le 07-05-2003 à 10:41:09
n°385646
multani
Dépressionnisé
Posté le 07-05-2003 à 11:36:40  profilanswer
 

:heink:

n°385780
multani
Dépressionnisé
Posté le 07-05-2003 à 13:10:01  profilanswer
 

:pt1cable:

n°385867
multani
Dépressionnisé
Posté le 07-05-2003 à 13:58:42  profilanswer
 

:bounce:

n°385937
genesis
Posté le 07-05-2003 à 14:23:27  profilanswer
 

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  :??:

n°386000
multani
Dépressionnisé
Posté le 07-05-2003 à 14:52:39  profilanswer
 

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:

n°386030
genesis
Posté le 07-05-2003 à 15:02:46  profilanswer
 

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
n°386053
multani
Dépressionnisé
Posté le 07-05-2003 à 15:13:11  profilanswer
 

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

mood
Publicité
Posté le 07-05-2003 à 15:13:11  profilanswer
 

n°386056
genesis
Posté le 07-05-2003 à 15:14:24  profilanswer
 

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

n°386061
multani
Dépressionnisé
Posté le 07-05-2003 à 15:15:35  profilanswer
 

Bon, ben si tout le monde est content :D

n°386062
multani
Dépressionnisé
Posté le 07-05-2003 à 15:15:53  profilanswer
 

Stagiaire power ....

n°386074
genesis
Posté le 07-05-2003 à 15:27:05  profilanswer
 

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.

n°386115
multani
Dépressionnisé
Posté le 07-05-2003 à 15:44:51  profilanswer
 

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

n°386123
genesis
Posté le 07-05-2003 à 15:49:34  profilanswer
 

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 !

n°387733
weed
Posté le 09-05-2003 à 00:42:28  profilanswer
 

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

n°387746
mrbebert
Posté le 09-05-2003 à 01:02:23  profilanswer
 

[: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 ;)

n°387899
multani
Dépressionnisé
Posté le 09-05-2003 à 09:20:36  profilanswer
 

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

n°388329
multani
Dépressionnisé
Posté le 09-05-2003 à 15:19:32  profilanswer
 

:bounce:

n°388353
Notsukaw
Be Aware
Posté le 09-05-2003 à 15:49:59  profilanswer
 

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
n°390170
multani
Dépressionnisé
Posté le 12-05-2003 à 11:20:11  profilanswer
 

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:

n°391496
multani
Dépressionnisé
Posté le 13-05-2003 à 10:38:45  profilanswer
 

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

n°391703
multani
Dépressionnisé
Posté le 13-05-2003 à 11:43:25  profilanswer
 

:sweat:

n°392370
multani
Dépressionnisé
Posté le 13-05-2003 à 17:20:49  profilanswer
 

:pt1cable:

n°392381
genesis
Posté le 13-05-2003 à 17:25:24  profilanswer
 

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

n°392409
multani
Dépressionnisé
Posté le 13-05-2003 à 17:37:09  profilanswer
 

genesis a écrit :

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


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

n°393137
multani
Dépressionnisé
Posté le 14-05-2003 à 11:21:10  profilanswer
 

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

n°394906
Notsukaw
Be Aware
Posté le 15-05-2003 à 12:30:51  profilanswer
 

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]
n°395579
multani
Dépressionnisé
Posté le 15-05-2003 à 17:03:54  profilanswer
 

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:

n°396387
Notsukaw
Be Aware
Posté le 16-05-2003 à 09:31:55  profilanswer
 

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]
n°396391
multani
Dépressionnisé
Posté le 16-05-2003 à 09:35:44  profilanswer
 

Apache ...

n°396392
multani
Dépressionnisé
Posté le 16-05-2003 à 09:36:56  profilanswer
 

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:

n°396576
multani
Dépressionnisé
Posté le 16-05-2003 à 11:18:51  profilanswer
 

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

n°396777
Notsukaw
Be Aware
Posté le 16-05-2003 à 14:00:20  profilanswer
 

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]
n°396906
multani
Dépressionnisé
Posté le 16-05-2003 à 15:00:51  profilanswer
 

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  ...)

n°397821
Notsukaw
Be Aware
Posté le 17-05-2003 à 11:45:18  profilanswer
 

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]
n°399134
multani
Dépressionnisé
Posté le 19-05-2003 à 09:43:24  profilanswer
 

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:

n°406959
Notsukaw
Be Aware
Posté le 25-05-2003 à 02:50:22  profilanswer
 

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]
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [php] Faire des recherches dans Active Directory

 

Sujets relatifs
[asp ? php ? ...?] Publication de pages dynamiques active desk...[projet] Quel langage de programmation utiliser ? (active directory...
safe_mode activé sur mon hebergeurY a t-il un moyen pour verifier si JavaScript est activé en PHP ?
Installer un module CPAN à active perl sous win 2000[I frames] Comment mettre le lien qui active la page dans la I frame ?
utilisation d'un module perso avec active perlRecommencer un try tant que le catch s'active
[Bat] créer un directory. 
Plus de sujets relatifs à : [php] Faire des recherches dans Active Directory


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR