Php avec ldap

titiroy Messages postés 1 Statut Membre -  
jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,
Grand débutant en programmation, j'ai une base ldap avec des noms et des prenoms, j'aimerai quand la personne ce connecte voir afficher son identité. Comment faire, je n'arrive pas à trouver quelque chose de valide
merci

1 réponse

  1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    Bonjour,

    TU peux éventuellement te servir d'un truc de ce genre :
    <?php
    
    /**
     * Class d'authentification  via LDAP
     *
     * @author a178017
     */
    
    /*
    */
    class Authentification {
      //put your code here
      public $logs=array();
      
      private $login,
              $password,
              $sh1password,
              $md5password,
              $ldapSrv,
              $ldapPort,
              $ldapDN,
              $ldapPWD,
              $ldapOU,
              $_ds,
              $_etat_connexion_LDAP,
              $_cnx_erreur=array();
    
    
     function __construct($login,$password,$ldapSrv=NULL,$ldapOU=Null,$LdapPort=NULL,$ldapDN='uid',$ldapDS=NULL,$ldapPWD=NULL) {
      
       if(empty($login) && empty($password)){
        $this->_cnx_erreur[] = "LANG_LOGIN_NO_LOGINPWD";
       }else{
        if(empty($login)){$this->_cnx_erreur[] = "LANG_LOGIN_NO_LOGIN";}
        if(empty($password)){$this->_cnx_erreur[] = "LANG_LOGIN_NO_PWD";}
       }
    
    	 // On alimente les variables de la class
       $this->login = $login;
       $this->password = $password;
       $this->md5Password = md5($password);
       $this->sh1password = sha1($password);
       $this->ldapSrv = $ldapSrv;
       $this->ldapOU = $ldapOU;
       $this->ldapPort=$LdapPort;
       $this->ldapDN=$ldapDN;
       $this->ldapPWD=$ldapPWD;
       $this->ldapDS=$ldapDS;
        
     }
    
     
     
       /**
      * Fermeture de la connexion LDAP lors de la destruction de l'objet
      */
      function __destruct() {
        //On clos la connexion  LDAP
        if($this->_etat_connexion_LDAP) {
          ldap_close($this->_ds);
        }
      }
    /*-------------------------------------------------------------------------------------------------------------------------*/ 
    /* CONNEXION
    /*-------------------------------------------------------------------------------------------------------------------------*/
     
     /**
      * Fonction a appeller pour la connexion LDAP
      * Script de connexion
      * @return Array
      */
     public function Connexion(){
    
        //Lancement de la connexion et enregistrement de l'etat
        $cnLdap= $this->CnxLdap();    
       
       $arrCNX['CNX_ERREUR']=$this->_cnx_erreur;
       $arrCNX['login']=$this->login;
       $arrCNX['pwd']=$this->password;
       $arrCNX['ETAT_CNX_LDAP']=$cnLdap;
       $arrCNX['logs']=$this->logs;
       $arrCNX['LDAP_SRV']=$this->ldapSrv;
       $arrCNX['LDAP_OU']=$this->ldapOU;
       
    return $arrCNX;
     
     }// fin de la fonction Connexion()
     //-------------------------------------------
     
      
     Private function CnxLdap(){
        $this->_etat_connexion_LDAP = $this->_Ldap_connect();
        return $this->match_login_password($this->login, $this->password,$this->ldapDN);   
     }
     
       /** 
      * Permet de lancer une connexion a l'annuaire LDAP
      * AuthentificationLdap::_server doit etre defini precedemment
      * @return bool Renvoie vrai si la connexion est ok. Renvoie false si la connexion est impossible.
      */ 
      private function _Ldap_connect() {
        $this->_ds=@ldap_connect($this->ldapSrv, $this->ldapPort);
        //On modifie le timeout. Max 5 secondes
        ldap_set_option($this->_ds, LDAP_OPT_TIMELIMIT, 20);
        
        if($this->_ds) {
          $bind = @ldap_bind($this->_ds, $this->ldap_login, $this->ldapPWD);
          
          if($bind) {
            $this->_insert_logs("Etat de la connexion : connecté à " . $this->ldapSrv);
            return true;
          }
          else {
            $this->_insert_logs("Etat de la connexion : connexion impossible à " . $this->ldapSrv);
            $this->_cnx_erreur[] = "LANG_LOGIN_LDAP_CNX_ERROR";
            return false;
          }
        }else{
            $this->_insert_logs("no DS  -Serveur:".$this->ldapSrv." -port:".$this->ldapPort);
            $this->_cnx_erreur[] = "LANG_LOGIN_LDAP_CNX_ERROR";
        }
      }
     
       /** 
      * Recupere les infos demandees sur la base ldap (nom, prenom, email...)
      * @param string $login Login LDAP
      * @param array $array_return Tableau specifiant les elements à rechercher
      * @param string $type_rech Recherche par login LDAP ou par matricule ATOS ('uid' ou 'employeenumber')
      * @return bool|array Renvoie valeurs demandees sous forme de tableau OU renvoie false si rien n'est trouve
      */ 
      public function view_infos_login($login, $array_return, $type_rech) {
        if($this->_etat_connexion_LDAP){     
          $ldap_filter="($type_rech=".$login.")"; 
          $ldap_search = @ldap_search($this->_ds, $this->ldapOU, $ldap_filter, $array_return);
          $ldap_result = @ldap_get_entries($this->_ds, $ldap_search);
          
          if($ldap_result['count'] != 1) {
            $this->_insert_logs("Recherche des infos demandées impossible, la recherche renvoie plusieurs résultats pour ce login. ldap_filter=".$ldap_filter);
            return false;
          }
          else {
            $this->_insert_logs("Recherche d'infos pour le login $login. Envoi du résultat");
            return $ldap_result;
          }
        }
        else {
          $this->_insert_logs("Recherche d'infos pour ce login impossible. La connexion à la base LDAP n'a pu étre établie.");
          $this->_cnx_erreur[] = "LANG_LOGIN_LDAP_CNX_ERROR";
          return false;
        }
      }
     
       /** 
      * Methode match_login_password()
      * Fait un bind du login et password sur la base ldap
      * afin de voir si ceux-ci correspondent
      *
      * @param string $login Login a verifier
      * @param string $password Password a verifier
      * @return bool Retourne true si le login et password correspondent
      */ 
      private function match_login_password($login, $password) {
        if($this->_etat_connexion_LDAP) {
          
          $ldap_return = array("dn");
          $ldap_result = $this->view_infos_login($login, $ldap_return,$this->ldapDN);
          
          if($ldap_result) {
            
            $ldap_testbind = @ldap_bind($this->_ds, $ldap_result[0]['dn'], $password);
            
            if($ldap_testbind) {
              $this->_insert_logs("Le login et Password correspondent.");
              return true;
            }
            else {
              $this->_insert_logs("Le login et Password ne correspondent pas.");
              $this->_cnx_erreur[] = "LANG_LOGIN_CNX_MATCH";
              return false;
            }
          }
          else {
            $this->_insert_logs("Impossible de matcher le login et password. Probleme lors de la requête de recherche.");
            return false;
          }
        }
        else {
          $this->_insert_logs("Recherche du login-Password impossible, la connexion au serveur n'a pu être établie.");
          $this->_cnx_erreur[] = "LANG_LOGIN_LDAP_CNX_ERROR";
          return false;
        }
      }
      
      
        /** 
      * Methode insert_logs()
      * Permet d'inserer de nouveaux logs
      *
      * @param string $log Log a inserer
      * @return void()
      */ 
      protected function _insert_logs($log) {
        $this->logs[] = $log;
      }
      
    //************************************************************************************/
    }// FIN DE LA CLASS
    //************************************************************************************/
    ?>
    


    Et pour l'utiliser... il suffit d'appeler la fonction :
    
    $oLdap = new Authentification($login,$password,$ldapSrv,$ldapOU,$LdapPort,$ldapDS,$ldapPWD);
    
    $cnx = oLdap->Connexion();
    


    0