Posez votre question Signaler

Authentification ldap en php via login/passw

hismaella 18Messages postés 21 février 2007Date d'inscription - Dernière réponse le 10 nov. 2007 à 13:35
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
Lire la suite 

Authentification ldap en php via login/passw »

3 réponses
Réponse
+6
moins plus
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
?>
Ajouter un commentaire
Réponse
+1
moins plus
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
Ajouter un commentaire
Réponse
+1
moins plus
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;
Ajouter un commentaire
Ce document intitulé « authentification ldap en php via login/passw » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?