Authentification ldap en php via login/passw

bonjour à tous,

j'ai un probléme d'authentification ldap en php via login et password quelqu'un pourrait - il m'aider ? en faite je dois pouvoir me logger à un annuaire ldap en introduisant un login et un mot de pass merci de m'aider si vous pouvez
Configuration: Windows XP
Internet Explorer 6.0

3 réponses

  1. désolé pour la maniére d'envoyer le code je n'ai pas l'habitude j'essaye d'aranger cela voilà ma page toto.php
    <?php
    /* Fichier : LDAP.class.php */
    // Création de la classe
    class LDAP
    {
    	// Attribut du login du LDAP
    	var $LDAP_login;
    	// Attribut du password du LDAP
    	var $LDAP_password;
    	// Attribut de l'hôte du LDAP
    	var $LDAP_host;
    	// Attribut de connection
    	var $connect;
    	//Identification
    	var $identification;
    
    	// Définition du constructeur
    	function LDAP($login, $password, $host)
    	{
    		// Vérification des variables
    		if (empty ($login) || empty ($host) || empty ($password)){
    		// Affichage du message d'erreur
    		//echo "<b>Erreur :</b> Une ou plusieurs variable(s) n'ont pas été renseigné.<br>Procédure interrompu";
    		exit;
    		}
    		else {
    			// Initialisation des attributs
    			$this->LDAP_login = $login;
    			$this->LDAP_password = $password;
    			$this->LDAP_host = $host;
    		}
    	}
    	
    	//fonction de connection
    	function connect()
    	{
    		// Connection à LDAP
    		$this->connect = @ldap_connect($this->LDAP_host);
    		// Vérification de la connection
    		if (!$this->connect){
    			// Affichage du message d'erreur
    			//echo "<b>Erreur :</b> Connection au serveur impossible impossible<br>";
    			return false;
    		}else{
    			return true;
    		}
    		// Initialisation de l'attribut de connection
    	}
    	
    	// Méthode Identification()
    	function identification ()
    	{
    		// Exécution de l'identification
    		$ident = @ldap_bind($this->connect, $this->LDAP_login, $this->LDAP_password);
    		//Vérification de la connection
    		if ($ident) {
    			$this->identification = $ident;
    			return true;
    	    } else {
        	    //echo "Echec d'identification<br>";
    			return false;
    	    }
        }
    	
    	//fonction recherche
    	// Attention le serveur est configurer pourne pas tolerer plus de 200 réponses a la requete
    	// temps de recherche maximale 2 secondes
    	function recherche($Nom)
    	{
    		echo 'Recherchons (sn='.$Nom.') ...';
    		// Recherche par nom
    		$search = ldap_search($this->connect, 'o="à compléter", c=fr', "sn=$Nom");  		echo 'Le résultat de la recherche est ' . $search . '<br />';
    	
    		echo 'Le nombre d\'entrées retournées est ' . ldap_count_entries($this->connect,$search) . '<br />';
    
    		echo 'Lecture des entrées ...<br />';
    		$info = ldap_get_entries($this->connect, $search);
    		echo 'Données pour ' . $info["count"] . ' entrées:<br />';
    	
    		for ($i=0; $i<$info["count"]; $i++) {
    			echo 'dn est : ' . $info[$i]["dn"] . '<br />';
    			echo 'premiere entree cn : ' . $info[$i]["cn"][0] . '<br />';
    			echo 'premiere entree sn : ' . $info[$i]["sn"][0] . '<br />';
    			echo 'premier email : ' . $info[$i]["mail"][0] . '<br />';
    			echo 'premier givenName : ' . $info[$i]["givenName"][0] . '<br />';
    			echo 'premier uid : ' . $info[$i]["uid"][0] . '<br />';
    		}
    	}
    
    	// Méthode deconnect()
    	function deconnect (){
    		// Déconnection
    		$deconnect = ldap_unbind($this->connect);
    		if(!$deconnect)
    			ldap_close($this->connect);//c les bretelles et la ceinture :)
    	}//fin de déconnexion
    }//fin de class
    ?>
    
    1. j'ai un probléme dauthentification ldap avec mon code et je ne vois pas ou vien l'erreur qq pourrait il m'aider car j'ai ma fenêtre d'authentification qui s'ouvre mais je dois cliquer 3 fois sur le boutton OK et ça ne m'affiche pas la page demandé si le login et le pass est bon voilà mon code:

      <?php
      $annu1 = "didie"; //Annuaire Principal il faut remplir avec le nom de ton serveur ou l'adresse ip si c'est pas défini
      include "./toto.php";
      header('WWW-Authenticate: Basic realm="LDAP"'); //fenetre de login ca sort tout seul une jolie fenetre

      /*j'ai oublié ca sans quoi ca ne te ramene pas les variables*/
      if(phpversion() < 4.2){
      foreach($HTTP_SERVER_VARS as $NomVar => $Value) $$NomVar = $Value;
      }else{
      foreach($_SERVER as $NomVar => $Value) $$NomVar = $Value;
      }

      session_start();
      //$identification = "0";

      if($PHP_AUTH_USER != '' && $PHP_AUTH_PW != ''){
      //---------------------------------------LDAP-------------------------------------------
      $serveur1 = new LDAP($PHP_AUTH_USER,$PHP_AUTH_PW,$annu1);
      if($serveur1->connect()){ //connexion au serveur LDAP
      if($serveur1->identification()){ //identification au serveur LDAP
      //------------------si identification ok
      header("location: ./inde.php"); //page suivante de ta page d'authentification
      /*le code doit etre situé en debut de page si tu utilise le header sinon ca va planter
      si tu ne veut pas utiliser le header il y a moyen en fait tu met ici tout le code a executer si l'authentification est bonne*/
      }else{
      //l'utilisateur n'a pas ete reconnu dans l'annuaire LDAP
      }
      $serveur1->deconnect(); //on se deconnect du serveur c'est plus propre quand meme
      }else{
      //connexion impossible
      }
      }else{
      //il faut remplir les champ
      }
      ?>

      et voilà ma page toto.php:

      <?php
      /* Fichier : LDAP.class.php */
      // Création de la classe
      class LDAP
      {
      // Attribut du login du LDAP
      var $LDAP_login;
      // Attribut du password du LDAP
      var $LDAP_password;
      // Attribut de l'hôte du LDAP
      var $LDAP_host;
      // Attribut de connection
      var $connect;
      //Identification
      var $identification;

      // Définition du constructeur
      function LDAP($login, $password, $host)
      {
      // Vérification des variables
      if (empty ($login) || empty ($host) || empty ($password)){
      // Affichage du message d'erreur
      //echo "<b>Erreur :</b> Une ou plusieurs variable(s) n'ont pas été renseigné.<br>Procédure interrompu";
      exit;
      }
      else {
      // Initialisation des attributs
      $this->LDAP_login = $login;
      $this->LDAP_password = $password;
      $this->LDAP_host = $host;
      }
      }

      //fonction de connection
      function connect()
      {
      // Connection à LDAP
      $this->connect = @ldap_connect($this->LDAP_host);
      // Vérification de la connection
      if (!$this->connect){
      // Affichage du message d'erreur
      //echo "<b>Erreur :</b> Connection au serveur impossible impossible<br>";
      return false;
      }else{
      return true;
      }
      // Initialisation de l'attribut de connection
      }

      // Méthode Identification()
      function identification ()
      {
      // Exécution de l'identification
      $ident = @ldap_bind($this->connect, $this->LDAP_login, $this->LDAP_password);
      //Vérification de la connection
      if ($ident) {
      $this->identification = $ident;
      return true;
      } else {
      //echo "Echec d'identification<br>";
      return false;
      }
      }

      //fonction recherche
      // Attention le serveur est configurer pourne pas tolerer plus de 200 réponses a la requete
      // temps de recherche maximale 2 secondes
      function recherche($Nom)
      {
      echo 'Recherchons (sn='.$Nom.') ...';
      // Recherche par nom
      $search = ldap_search($this->connect, 'o="à compléter", c=fr', "sn=$Nom"); echo 'Le résultat de la recherche est ' . $search . '<br />';

      echo 'Le nombre d\'entrées retournées est ' . ldap_count_entries($this->connect,$search) . '<br />';

      echo 'Lecture des entrées ...<br />';
      $info = ldap_get_entries($this->connect, $search);
      echo 'Données pour ' . $info["count"] . ' entrées:<br />';

      for ($i=0; $i<$info["count"]; $i++) {
      echo 'dn est : ' . $info[$i]["dn"] . '<br />';
      echo 'premiere entree cn : ' . $info[$i]["cn"][0] . '<br />';
      echo 'premiere entree sn : ' . $info[$i]["sn"][0] . '<br />';
      echo 'premier email : ' . $info[$i]["mail"][0] . '<br />';
      echo 'premier givenName : ' . $info[$i]["givenName"][0] . '<br />';
      echo 'premier uid : ' . $info[$i]["uid"][0] . '<br />';
      }
      }

      // Méthode deconnect()
      function deconnect (){
      // Déconnection
      $deconnect = ldap_unbind($this->connect);
      if(!$deconnect)
      ldap_close($this->connect);//c les bretelles et la ceinture
      }//fin de déconnexion
      }//fin de class
      ?>

      merci de m'aider si vous pouvez
      1. Bonjour,
        Il ya a une petite erreur dans ta class. Tes données membres doivent être privées pour que seulement les méthodes de la classe y est accès.
        Donc :

        // Attribut du login du LDAP
        private $LDAP_login;
        // Attribut du password du LDAP
        private $LDAP_password;
        // Attribut de l'hôte du LDAP
        private $LDAP_host;
        // Attribut de connection
        private $connect;
        //Identification
        private $identification;