IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

PHP et LDAP, je nage :(


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 33
    Par défaut PHP et LDAP, Connexion et certificats
    Bonjour à vous,

    Tout d'abord je vous remercie pour le temps que vous allez prendre à me lire.
    Je ne savais pas trop où poster mon message, désolé si je ne suis pas dans la bonne section.

    Voila mon problème en quelques mots.

    J'ai développé une petite application en PHP qui tourne très bien. On me demande depuis peu d'y ajouter une authentification via un annuaire LDAP. C'est là que commence le drame.

    Pour cela on m'a fournis 3 certificats nommé certificat_ldap_blabla.cer. Les 3 sont de l'extention .cer
    Ainsi que l'adresse du serveur ldap://ldap.blabla.com et ldaps://ldap.blabla.com:636.

    Mon 1er test a été de tenter une simple connexion anonyme sur le serveur via l'adresse ldap://ldap.blabla.com et une recherche d'information à l'aide du code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    <?php
    $ldaphost = 'ldap://ldap.blabla.com';
    $ldapport = 389;
     
    $ldapconn = ldap_connect($ldaphost,$ldapport)
        or die('Impossible de se connecter au serveur LDAP.');
     
    if ($ldapconn) {
      ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3);
      ldap_set_option($ldapconn, LDAP_OPT_REFERRALS, 0);    
     
     
      $ldapbind = ldap_bind($ldapconn);
     
      if ($ldapbind) {
          echo 'Connexion LDAP réussie...<br/>';
      } else {
          echo 'Connexion LDAP échouée...<br/>';
          exit;
      }
    }
     
    //Test interrogation LDAP
    $dn='ou=blibli,dc=blabla,dc=com';
    $filtre = 'uid=blublu';
     
    $sr = ldap_search ($ldapconn, $dn, $filtre);
     
    $info = ldap_get_entries($ldapconn, $sr);
     
    for ($i=0; $i<$info["count"]; $i++) {
     
      echo 'dn : ' . $info[$i]["dn"] . '<br />';
    	echo 'cn : ' . $info[$i]["cn"][0] . '<br />';
    	echo 'sn : ' . $info[$i]["sn"][0] . '<br />';
    	echo 'mail : ' . $info[$i]["mail"][0] . '<br />';
    	echo 'uid : ' . $info[$i]["uid"][0] . '<br />';
    }
    ldap_close($ldapconn);
    ?>
    Jusque là tout fonctionne bien.

    Les problèmes ont commencé quand il a fallut que j'utilise l'adresse ldaps://ldap.blabla.com:636.
    En gros, le serveur ldap n'autorise pas la comparaison avec UserPassword lors d'une connexion anonyme. Si je modifie mon script et que j'ajoute ldap_bind($ldapconn,$ldaplog,$ldappass); je me fais insulter. J'imagine que c'est à ce moment qu'entrent en jeu les certificats. Là je suis perdu, je ne vois pas comment les utiliser.
    J'ai lu beaucoup d'article en cherchant depuis google mais aucun ne m'aide réellement. Il doit bien y avoir la solution mais les articles me noient plus qu'autre chose.

    Je suis sous windows, j'ai installé Xampp, openssl et openldap. Je ne vois pas vraiment à quoi me sert openldap car je ne veux pas créer un annuaire mais en contacter un existant.

    Auriez-vous par hasard un conseil ou un lien afin que je puisse apprendre ?

  2. #2
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 33
    Par défaut
    Problème résolu. En fait je faisais totalement fausse route.
    En clair, je n'avais pas du tout besoin des certificats. Il suffit d'effectuer deux ldap_bind() afin de valider une authentification.
    Une 1er ldap_bind() pour récupérer le dn, en anonyme.
    Un second ldap_bind() pour tester la validité du mot de passe et du dn associé.

    Je ne sais pas si c'est bien clair mais voici mon script...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    $login = 'toto'; //le login … tester
    $pass = 'titi'; //le mot de passe … tester
    $host = 'ldap://ldap.blabla.com'; //le serveur ldap, port 389
     
    $ldapcnx = @ldap_connect($host)
        or die('Impossible de se connecter au serveur LDAP.');
    @ldap_set_option($ldapcnx, LDAP_OPT_PROTOCOL_VERSION, 3);
    @ldap_set_option($ldapcnx, LDAP_OPT_REFERRALS, 0);
     
      //Je commence par un bind simple et anonyme
      if (@ldap_bind($ldapcnx)) {
        //… partir du login (uid) je vais chercher le dn correspondent
        $sr = @ldap_search ($ldapcnx,'ou=blibli,dc=blabla,dc=com', 'uid='.$login);
        $info = @ldap_get_entries($ldapcnx, $sr);
     
        //je test si je trouve bien un resultat
        if ($info['count'] == 0)  {
          //Pas de resultat, donc on stoppe le traitement
          echo 'compte inexistant !!';    
        }
        else {
          //Il y a un resultat, j'effectue un second bind mais cette fois 
          //j'utilise le dn et le mot de passe saisi
          if (@ldap_bind($ldapcnx,$info[0]['dn'],$pass)) {
            echo 'authentifi‚ !!';
          }
          else {
            echo 'saisie incorrecte !!';
          }
        }
      }
      else {
        echo 'connexion LDAP impossible !';
      }
    ldap_close($ldapcnx);
    }

  3. #3
    Membre averti
    Inscrit en
    Décembre 2010
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 24
    Par défaut
    Bonjour

    SVP votre code c'est pour authentification utilisateur simple ? sinon qu'est ce que je dois modifier
    parce que mon tuteur m'a demandé ceci et je distingue pas la différence

    je vous remrcie d'avance

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. php avec ldap connection
    Par ldiaz dans le forum Langage
    Réponses: 3
    Dernier message: 10/12/2009, 16h54
  2. [PHP-JS] LDAP - Récupérer l'@email de l'emprunteur
    Par bilou95 dans le forum Langage
    Réponses: 3
    Dernier message: 13/10/2008, 10h32
  3. [LDAP] PHP export LDAP
    Par el kafard dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 12/09/2007, 11h57
  4. [LDAP] php et ldap : ldap_compare
    Par DarkstarZ dans le forum Bibliothèques et frameworks
    Réponses: 22
    Dernier message: 03/07/2007, 13h48
  5. Réponses: 8
    Dernier message: 29/09/2006, 14h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo