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.
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.