Tutoriel de correction du TP5 

Partie 2 - Cas d'utilisation "Contrôle d'accès par LDAP"

Mise en place

Attention :  LDAP n'est pas utilisable par défaut avec EasyPHP; il faut ajouter l'extension php_ldap.

Cliquer avec le bouton droit sur l'icone de EasyPHP dans la barre de tâches et  choisir l'item :

Configuration->Extensions PHP

Cocher la boîte à cocher "php_ldap" puis cliquer  sur le bouton "Appliquer".
Redémarrer EasyPHP.

Le contrôle d'accès doit interroger l'annuaire LDAP. Pour cela, nous allons définir une classe LDAPLoginController et l'utiliser en récrivant le contenu du fichier login/loginAccess.conf.php :

<?php
// Changer ces 2 lignes pour utiliser un validateur de login différent
include_once 'LDAPLoginController.class.php';
$loginControl = new LDAPLoginController();
?>

Définition de la classe LDAPLoginController

Créer le fichier login/LDAPLoginController.class.php définissant la classe LDAPLoginController

<?php
include_once ('AbstractLoginController.class.php');
include_once ('ldap.cnam.conf.php'); // définit $GLOBALS['LDAP_HOST']

class LDAPLoginController extends AbstractLoginController {

    function isValidLogin($login) {
        return true; // test impossible avec LDAP!?
    }

    function isValidPassword($login, $password, & $errorMessage) {
        return $this->search($login, $password, $errorMessage);
    }
// ...

Cette classe définit une méthode search qui interroge l'annuaire LDAP recensant le personnel du CNAM ($ldap_base = "ou=People,o=personnel,dc=cnam,dc=fr"); search utilise les fonctions  ldap_connect, ldap_bind et ldap_close :

    /* private */
    function search($user, $pwd, & $errorMessage) {
        $errorMessage = '';
        $ds = ldap_connect($GLOBALS['LDAP_HOST']);
        if ($ds) {
            $ldap_base = "ou=People,o=personnel,dc=cnam,dc=fr";
            $dn = "uid=" . $user . "," . $ldap_base;
            $r = @ ldap_bind($ds, $dn, $pwd);
            ldap_close($ds);
            return $r;
        } else {
            $errorMessage = "Impossible de se connecter au serveur LDAP {$GLOBALS['LDAP_HOST']}";
            die($errorMessage);
        }
        return false;
    }
}
?>

Tester avec cette page d'exemple .