Connexion ldap avec login mot de passe en php

Soyez le premier à donner votre avis sur cette source.

Snippet vu 43 534 fois - Téléchargée 29 fois

Contenu du snippet

ce code permet de verifier l'identité d'une personne se connectant a un annuaire LDAP ( dans mon cas Active directory ) la connexion se fait en anonymous et il est necessaire de creer une page a part avec un formulaire qui pointera sur cette page. en cas de succès d'identification, l'utilisateur est redirigé sur une page, sinon il revient sur la page de Login / mot de passe.

Source / Exemple :


<?php
// informations de connexions

$ldap_host = "localhost";  //inserer ici l'addresse du serveur LDAP
$base_dn = "DC=GUESSANT,DC=ORG";

$user = "cn=".$_POST['user'];  //  on traite les information recoltées 
$password = $_POST['pass']; 

$admin="admin";  // indiquez ici le groupe auquels appartient les admin et les membres. dans mon exemple, j'ai un o=admin et un o=membres.
$membres="membres";

$connect = ldap_connect($ldap_host)  // connexion en anonymous
    or exit(">>Connexion au serveur LDAP echoué<<");
		 
		 
ldap_set_option($connect, LDAP_OPT_PROTOCOL_VERSION, 3);  // on passe le LDAP en version 3, necessaire pour travailler avec le AD
ldap_set_option($connect, LDAP_OPT_REFERRALS, 0);

	 
$read = ldap_search($connect,$base_dn, $user)
     or exit(">>erreur lors de la recherche<<");
$info = ldap_get_entries($connect, $read);

if ( preg_match("!".$admin."!",$info[0]["dn"] ) ) // si le user trouvé est admin :
	{
	$bind = ldap_bind($connect,$info[0]["dn"],$password);
	if ( $bind == FALSE )	// si le BIND est FALSE, le mot de passe est erronée
		// echo( " il est admin mais faux mdp");
		header("location: auth_ldap.php?result='0'");
	elseif ( $bind == TRUE )   // on peut ajouter d'autre traitement si l'identification est ok ( ex : $_SESSION['user'] = ... )
		{
			header("location: index.php");
		}
	} 
elseif ( preg_match("!".$membres."!",$info[0]["dn"]) ) // si le user trouvé est membres :
	{
    $bind = ldap_bind($connect,$info[0]["dn"],$password);
	if ( $bind == FALSE )  // si le BIND est FALSE, le mot de passe est erronée
		// echo( " il est membre mais faux mdp");
		header("location: auth_ldap.php?result='0'");
	
	elseif ( $bind == TRUE )  // on peut ajouter d'autre traitement si l'identification est ok ( ex : $_SESSION['user'] = ... )
		{
			header("location: index.php");
		}
	}
else // le user n'a pas pu être trouvé
{
// echo  "nom de user invalide";
header("location: auth_ldap.php?result='1'");
}

ldap_close($connect);
?>

Conclusion :


pour info , le test s'effectue sur le ldap_bind qui retourne une erreur en cas d'echec. mais comme la redirection est rapide on ne le voit pas.

A voir également

Ajouter un commentaire

Commentaires

Messages postés
1
Date d'inscription
mercredi 9 juin 2010
Statut
Membre
Dernière intervention
15 juin 2010

.
Messages postés
4
Date d'inscription
mercredi 1 février 2006
Statut
Membre
Dernière intervention
2 juin 2009

pas facile sans le code ...
Messages postés
44
Date d'inscription
mercredi 9 septembre 2009
Statut
Membre
Dernière intervention
11 avril 2011

Bonjour,

Je suis en stage, et j'obtiens la même erreur que vous:

Warning: Wrong parameter count for ldap_search() in C:\wamp\www\debut\traitement.php on line 16
>>erreur lors de la recherche<<

Quelqu'un a une solution ??
Messages postés
4
Date d'inscription
mercredi 1 février 2006
Statut
Membre
Dernière intervention
2 juin 2009

si tu veux tester les mot de passe AD il te suffit de te connecter avec ce couple login/mdp, ainsi tu vois si tu est rejeté ou non
Messages postés
4
Date d'inscription
vendredi 25 janvier 2008
Statut
Membre
Dernière intervention
27 novembre 2010

Bonjour, jusqu'a present le probleme de recherche n'est pas resolu.
que faut il faire alors? un Bind authentifié avant de lancher la recherche?
Car dans le code ci dessous il recherche avant de faire ldap_bind;
De plus le ldap_connect ne prend pas de parametre d'authentification
Alors quelqu'un aurait il une idee pour y parvenir?
merci
ps: les mot de passe dans active D sont cryptés alors comment les tester avec celui envoyé par formulaire?
Afficher les 15 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.