Connexion ldap avec login mot de passe en php

Soyez le premier à donner votre avis sur cette source.

Snippet vu 48 184 fois - Téléchargée 31 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
TBSO59 Messages postés 1 Date d'inscription mercredi 9 juin 2010 Statut Membre Dernière intervention 15 juin 2010
15 juin 2010 à 15:50
.
zobinems Messages postés 4 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 2 juin 2009
2 juin 2009 à 15:57
pas facile sans le code ...
Utilisateur anonyme
2 juin 2009 à 14:56
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 ??
zobinems Messages postés 4 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 2 juin 2009
1 juin 2009 à 16:37
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
angellestat Messages postés 4 Date d'inscription vendredi 25 janvier 2008 Statut Membre Dernière intervention 27 novembre 2010
1 juin 2009 à 12:41
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?

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.