Alors vous avez développé une belle application en PHP, et vous souhaitez que les utilisateurs s’authentifient avec l’annuaire Microsoft Active Directory de votre entreprise ?

Voici un rapide mode d’emploi. L’exemple est pour un système Linux Debian 10. Vous aurez besoin d’installer quelques paquets:

$ sudo apt install php-ldap
$ sudo phpenmod ldap
$ sudo service apache2 restart

Cette version condensée utilise 4 variables : $ldap_server, $domain, $user_pseudo, et $user_password.

  • $ldap_server est le nom ou l’adresse IP du contrôleur de domaine Microsoft Active Directory sur votre réseau
  • $domain est le nom de votre domaine Active Directory
  • $user_pseudo et $user_password sont le login et le mot de passe de l’utilisateur qui veut se connecter.

Voici à quoi peut ressembler votre script d’authentification, que vous pouvez appeler par exemple « auth.php« :


<?php
$ldap_server='monserveurad.maboite.com';
$domain='mondomainead';
// ----------------- AUTHENTIFICATION LDAP ------------------------
if ( isset($_POST['user_password']) ) {
       $user_pseudo=$_POST['user_pseudo'];
       $user_password=$_POST['user_password'];
        // --- Connexion au serveur AD
        $ad = ldap_connect($ldap_server);
        // Définissons quelques variables...
        ldap_set_option($ad, LDAP_OPT_PROTOCOL_VERSION, 3);
        ldap_set_option($ad, LDAP_OPT_REFERRALS, 0);
        // echo "Serveur AD : $ldap_server Domaine : $domain Pseudo : $user_pseudo Mot de passe : $user_password <br>";
       // On tente l'authentification 
       @$bd = ldap_bind($ad,"$user_pseudo@$domain","$user_password");
       if ( $bd) { // Si authentification ok, redirection vers le menu principal de l'appli
             echo "Bienvenue $user_pseudo";
             session_start();
             $_SESSION["login"] = true;
             $_SESSION["user_pseudo"] = $user_pseudo;
             echo "<meta http-equiv=refresh content=1;url=menu.php />";
       }
       else { echo "<p>Authentification échouée</p>" ; exit; }
        ldap_close($ad);
} else {
    echo "<form method=post>";
    echo "Votre identifiant <input type=text name=user_pseudo value=$user_pseudo >";
    echo "Votre mot de passe <input type=password name=user_password value=$user_password >";
    echo '<input type=submit>';
}
// ---------------- Fin authentification LDAP ----------------------
?>

Et dans le script « menu.php » :

<?php
session_start();
if ( $_SESSION["login"] != true ) { // Si pas de session, on renvoie à la page d'authentification
    echo "<meta http-equiv=refresh content=1;url=auth.php />";
    exit;
}
// Si la session existe, on affiche la page
$user_pseudo= $_SESSION["user_pseudo"];
echo  "Vous êtes connecté en tant que : $user_pseudo";
?>

Pensez aux autres, laissez vos commentaires ci-dessous…

Print Friendly, PDF & Email
  1. Merci pour ce bout de code , j’ai testé et c’est exactement ce que je cherché.

    Maintenant , comment empêcher les utilisateurs d’accéder directement à la page menu.php sans s’être authentifié avec la page auth.php ?
    Et ensuite , comment récupérer la variable de l ‘identifiant ($user_pseudo) dans la page menu.php ?

    Merci d’avance

    Fabien

    • Bonjour Fabien,
      Pour empêcher les utilisateurs d’accéder directement à la page menu.php, il faut créer une session PHP.
      J’ai complété le code d’exemple. En gros :

      Dans auth.php, ajouter les 3 lignes :
      session_start();
      $_SESSION[‘login’] = true;
      $_SESSION[‘user_pseudo’] = $user_pseudo;

      Et dans menu.php, voir l’exemple ci-dessus.

      JFR

  2. Merci pour la réponse très rapide 🙂
    Je viens de tester mais ça tourne en boucle :
    après une authentification réussite j’arrive bien sur la page du nenu.php et je suis tout de suite redirigé sur la page auth.php
    J’ai l’impression que la session n’est pas reprise quand j’arrive sur la page menu.php ( je suis novice sur ce sujet)

    • Bonsoir Fabien,
      C’est peut-être lié aux doubles quotes, qui étaient transformées par WordPress en « dans le code donné en exemple.
      Je l’ai corrigé dans l’article. Vérifiez ce point.
      Et si vous voulez envoyez-moi votre code par Email à jf.rullier@activpart.com pour que je le checke…

  3. Super Merci 🙂
    Il y avait bien un pb avec les double quote.

    Mais il y en avait un autre :
    j’ai du ouvrir la session au tout début de ma page auth.php comme ci-dessous :

    …..

    Maintenant tout fonctionne , encore MERCI !

Leave a Reply

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Blue Captcha Image
Refresh

*

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.