Connexion ldap avec login mot de passe en php

Soyez le premier à donner votre avis sur cette source.

Snippet vu 42 714 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

cs_garfield90
Messages postés
388
Date d'inscription
lundi 7 juillet 2003
Statut
Webmaster
Dernière intervention
10 février 2009

commente
echo "Le user est admin"; et echo "Le user est membre";
car la on peut faire du BRUTE FORCE pour trouvé le mdp étant donné que l'on sait que le login existe

sinon le code a l'air correct, pas d'annuaire LDAP sous la main ;)
cs_glad
Messages postés
97
Date d'inscription
lundi 26 novembre 2001
Statut
Membre
Dernière intervention
24 février 2012

Salut,

Cool, justement je m'embête avec ça depuis un certain temps. J'arrivais partiellement à l'utiliser mais pas bien. Et là je vois deux ou trois options que je n'utilisais pas !
Merci :-)
Si t'as d'autres trucs avec AD, je suis intéressé.
Bonne continuation.

à ++
cs_gadou
Messages postés
4
Date d'inscription
mardi 14 janvier 2003
Statut
Membre
Dernière intervention
8 décembre 2005

bonjour,
je cherche exactement la meme chose mais en ASP
je ne trouve pas...
quelqu'un peut m'aider.?
merci
Toto102
Messages postés
1
Date d'inscription
vendredi 26 décembre 2003
Statut
Membre
Dernière intervention
9 janvier 2006

salut;
pour l ASP vous pouvez voir le lien suivant:
http://www.rallenhome.com/books/ad2e/code.html
bonne chance
crashyear
Messages postés
9
Date d'inscription
jeudi 9 juin 2005
Statut
Membre
Dernière intervention
5 janvier 2007

Bonjour,

Je viens de tester ce code qui m'a l'air bien... mais moi j'ai un souci, il m'affiche le message suivant >>erreur lors de la recherche<< qui se trouve à la ligne 22.
Comme je n'y connai rien en AD et en LDAP quelqu'un pourrait-il m'aider à comprendre?

Merci

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.