Php avec ldap

Fermé
titiroy Messages postés 1 Date d'inscription vendredi 6 novembre 2015 Statut Membre Dernière intervention 6 novembre 2015 - 6 nov. 2015 à 09:30
jordane45 Messages postés 38243 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 3 octobre 2024 - 7 nov. 2015 à 02:27
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
A voir également:

1 réponse

jordane45 Messages postés 38243 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 3 octobre 2024 4 689
7 nov. 2015 à 02:27
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