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

  FORUM HardWare.fr
  Programmation
  PHP

  [HELP] ldap_bind prend le full name au lieu du logon name ?!

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[HELP] ldap_bind prend le full name au lieu du logon name ?!

n°1736355
elliotdoe
Posté le 23-05-2008 à 16:23:33  profilanswer
 

Bonjour à tous,

 

Tout est dans le titre.
Je fais une requête ldap_connect puis ldap_bind. Tout fonctionne quand le full name de l'utilisateur est le même que son login, mais s'il est différent ça ne fonctionne pas.
Par contre ça fonctionne si je rentre directement le full name + password.

 

Pour me faire comprendre : mon AD sous Win2K3S a un utilisateur "Michael Truc" dont le login est "mtruc".
Si j'entre "mtruc" + password, ça ne passe pas. Si j'entre "Michael Truc" + password, ça passe.

 

Mon code :

 
Code :
  1. $domain_login = "DOMAINE\\" . $login;
  2. $ldap['user'] = $domain_login;
  3. $ldap['pass'] = $passwd;
  4. $ldap['host'] = 'serveur.domaine.com';
  5. $ldap['port'] = 389;
  6. $ldap['dn'] = 'CN='.$ldap['user'].',OU=users,OU=blabla,OU=FRANCE,DC=domaine,DC=com';
  7. define("LDAP_INVALID_CREDENTIALS", 0x31 );
  8. // Désactiver les rapports d'anomalie, mais laisser les rapports d'erreur
  9. error_reporting(E_ERROR | E_PARSE | E_NOTICE);
  10. // Connexion au serveur ldap
  11. $ds = ldap_connect($ldap['host'], $ldap['port']) or die("Impossible de se connecter au serveur LDAP {".$ldap['host']."}" );
  12. ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
  13. ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);
  14. // Identification par le ldap
  15. $ldap['bind'] = ldap_bind($ds, $ldap['dn'], $ldap['pass']);
  16. if(!$ldap['bind'])
  17. {
  18. if (ldap_errno($ds) == LDAP_INVALID_CREDENTIALS)
  19. {
  20. echo $ldap['user'].' est refusé';
  21. }
  22. else echo ldap_error($ds);
  23. exit;
  24. }
 

Une idée ? Ou c'est une limitation ?


Message édité par elliotdoe le 27-05-2008 à 17:02:14
mood
Publicité
Posté le 23-05-2008 à 16:23:33  profilanswer
 

n°1737109
soju
One shot !
Posté le 26-05-2008 à 11:47:36  profilanswer
 

essaye de préfixer avec le nom du domaine AD (genre "DOMAINE\mtruc" )
et essaye aussi avec la v3 du protocole ldap :

Code :
  1. ldap_set_option($ldap_connect, LDAP_OPT_PROTOCOL_VERSION, 3);

n°1737379
elliotdoe
Posté le 26-05-2008 à 19:01:40  profilanswer
 

Ok merci, je testerai demain :jap:

n°1737868
elliotdoe
Posté le 27-05-2008 à 16:55:56  profilanswer
 

Aucune des solutions ne fonctionne :/
 
J'ai préfixé avec "domaine\", avec "@domaine.com", ça ne change rien.
J'ai aussi mis en place la V3.
 
C'est étrange comme comportement. Se connecter par "Prénom Nom" c'est pas des plus intuitifs...

n°1737873
elliotdoe
Posté le 27-05-2008 à 17:02:29  profilanswer
 

PS : j'ai mis à jour mon code sur le premier message.

n°1737878
soju
One shot !
Posté le 27-05-2008 à 17:05:47  profilanswer
 

bizarre, à mon taff ça marche sans soucis avec une AD sur 2003 serveur
- t'as quoi dans $ldap['dn'] ?
- tu as testé en dur avec par exemple un truc du genre : ldap_bind($ds, 'DOMAIN\mtruc', 'pass');

n°1737885
soju
One shot !
Posté le 27-05-2008 à 17:07:53  profilanswer
 

ha ok, remplace la ligne 18 :

Code :
  1. $ldap['bind'] = ldap_bind($ds, $ldap['user'], $ldap['pass']);

n°1737919
electricbl​ue
Pas très inspiré...
Posté le 27-05-2008 à 17:25:47  profilanswer
 

L'erreur est normale : pour identifier l'utilisateur, tu passes son DN complet et son mot de passe. En l'occurence (dans AD généralement), le DN d'un utilisateur est du genre "cn=Prenom Nom,<reste du DN>".
 
Quand tu entres le login 'Michael Truc', la variable $ldap['user'] (ligne 2) s'initialise avec 'Michael Truc' et la ligne 6 génère le DN "cn=Michael Truc,<reste du dn>" qui est un DN existant.
Lorsque tu passes en paramètre du script le login AD (mtruc) et non plus le nom prénom (qui correspond à la valeur du cn), tu te retrouves avec le DN suivant : "cn=mtruc,<reste du DN>", or ce DN ne doit pas exister dans AD, d'où l'erreur.
 
Une solution serait de rechercher le DN de l'utilisateur à partir de son login AD via un filtre ldap classique ; l'attribut AD contenant le login AD est 'sAMAccountName'. Une fois ce DN trouvé, tu refais le bind en l'utilisant ; si le filtre échoue, c'est que l'utilisateur a entré un mauvaus login.


Message édité par electricblue le 27-05-2008 à 17:27:57
n°1737921
elliotdoe
Posté le 27-05-2008 à 17:28:12  profilanswer
 

Ok, le bind marche maintenant, merci ! A force de regarder son code on ne voit plus les erreurs de ce genre...

 

Par contre j'ai un nouveau problème :
J'ai un ldap_search juste après, qui ne trouve plus ce que je lui demande:

 
Code :
  1. if ($ds) {
  2. $attributes = array("cn", "sn", "givenname", "mail" );
  3. $filter="(|(sn=*)(givenname=*))";
  4. $sr = ldap_search($ds, "CN=" . $login . ",OU=users,OU=blabla,OU=FRANCE,DC=domaine,DC=com", $filter, $attributes);
  5. $entries = ldap_get_entries($ds, $sr);
  6. foreach ($entries[0]['cn'] as $key => $cn);
  7. foreach ($entries[0]['sn'] as $key => $sn);
  8. foreach ($entries[0]['givenname'] as $key => $givenname);
  9. foreach ($entries[0]['mail'] as $key => $mail);
  10. ###SESSION STARTS###
  11. session_start();
  12. //On enregistre les variables de session
  13. $_SESSION['login'] = $cn;
  14. $_SESSION['nom'] = $sn;
  15. $_SESSION['prenom'] = $givenname;
  16. }
 

Une idée ? C'est lié mais je vois pas en quoi, puisqu'il devrait chercher sur les bons users.

 

C'est étonnant, quand j'utilise un utilisateur qui a son full name identique à son login, ça fonctionne sans erreurs. Dans l'autre cas, j'ai :

 
Citation :


Notice: Undefined variable: cn in c:\program files\easyphp1-8\www\tr\php\auth-ldap.php on line 66

 

Notice: Undefined variable: sn in c:\program files\easyphp1-8\www\tr\php\auth-ldap.php on line 67

 

Notice: Undefined variable: givenname in c:\program files\easyphp1-8\www\tr\php\auth-ldap.php on line 68

  

PS : electric, merci pour le conseil. Je vais chercher sur cette piste.


Message édité par elliotdoe le 27-05-2008 à 17:31:26
n°1737926
electricbl​ue
Pas très inspiré...
Posté le 27-05-2008 à 17:39:38  profilanswer
 

Toujours le même problème : tu génères un DN inexistant ligne 4.
 
Voici l'algo que je vois :
1- connexion en tant que manager à l'annuaire
2- recherche de l'entrée avec le filtre suivant : (|(cn=$login)(samaccountname=$login))
3- un seul résultat doit être retourné par la requête ci dessus, sinon erreur
4- un fois l'entrée trouvée, tu prends son DN
5- tu refais un bind en utilisant ce DN et le mot de passe de l'utilisateur

mood
Publicité
Posté le 27-05-2008 à 17:39:38  profilanswer
 

n°1738011
elliotdoe
Posté le 27-05-2008 à 19:03:59  profilanswer
 

Ok nickel. Je teste demain et je te dis.

n°1738149
soju
One shot !
Posté le 28-05-2008 à 09:09:26  profilanswer
 

electricblue a écrit :

1- connexion en tant que manager à l'annuaire
2- recherche de l'entrée avec le filtre suivant : (|(cn=$login)(samaccountname=$login))
3- un seul résultat doit être retourné par la requête ci dessus, sinon erreur
4- un fois l'entrée trouvée, tu prends son DN
5- tu refais un bind en utilisant ce DN et le mot de passe de l'utilisateur


ou plus simple :
- bind direct avec le login de l'utilisateur
- recherche avec "sAMAccountName=$login"

n°1738282
electricbl​ue
Pas très inspiré...
Posté le 28-05-2008 à 13:30:58  profilanswer
 

soju a écrit :


ou plus simple :
- bind direct avec le login de l'utilisateur
- recherche avec "sAMAccountName=$login"


Comment il peut binder s'il ne connait justement pas l'entrée de l'utilisateur?

n°1738295
soju
One shot !
Posté le 28-05-2008 à 13:53:07  profilanswer
 

electricblue a écrit :

Comment il peut binder s'il ne connait justement pas l'entrée de l'utilisateur?

comme j'ai dit plus haut
ça marche très bien sur mes applis

n°1738404
electricbl​ue
Pas très inspiré...
Posté le 28-05-2008 à 16:12:36  profilanswer
 

Tu pourrais être plus précis svp?
Qu'est-ce que tu entends par login de l'utilisateur (DN, RDN, juste la valeur)?
Tes applis ont-elles un mécanisme d'authentification inclus ou est-ce toi qui l'as développé?


Message édité par electricblue le 28-05-2008 à 16:13:29
n°1738410
soju
One shot !
Posté le 28-05-2008 à 16:28:43  profilanswer
 

juste DOMAINE\login
et authentification maison
 
Je ne suis pas un spécialiste de ldap ni ad, mais je trouvais bizarre de devoir s'authentifier sur l'annuaire avec un compte générique juste pour authentifier un utilisateur.
 

n°1738453
elliotdoe
Posté le 28-05-2008 à 18:09:41  profilanswer
 

Ca m'intéresse bien de savoir comment tu fais soju :jap:


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

  [HELP] ldap_bind prend le full name au lieu du logon name ?!

 

Sujets relatifs
séparer les champs d'un fichier *.txt par des " " (help)[RESOLU] Récupérer des valeurs par une requête ldap_search
[C#.NET] Communication entre 2 forms, help pleasevba excel : utiliser la proprièté name d'une cellule
PLEASE HELP!!! Probleme avec un loadmovieAlgorithme de graphe, help, prise de tête!!
HELP please, pb debutant de raccord entre bdd sql et programme java[mysql] help pour REGEXP
formulaire dans une iframe = erreur [please help me ^^] 
Plus de sujets relatifs à : [HELP] ldap_bind prend le full name au lieu du logon name ?!


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