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
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
A voir également:
- Php avec ldap
- Easy php - Télécharger - Divers Web & Internet
- Ldap client - Télécharger - Édition & Programmation
- Php?id=1 - Forum PHP
- \R php ✓ - Forum PHP
- Glpi impossible de joindre l'annuaire ldap ✓ - Forum Gestion de parc
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
7 nov. 2015 à 02:27
Bonjour,
TU peux éventuellement te servir d'un truc de ce genre :
Et pour l'utiliser... il suffit d'appeler la fonction :
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();