Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
assoceadminphp [2016/03/29 17:01] de-roche2014assoceadminphp [2022/02/14 17:54] (Version actuelle) – Suppression de la page (dépreciée) acier2020
Ligne 1: Ligne 1:
-**ATTENTION** : Cette page n'est plus à jour. Visitez [[https://oauth.iiens.net/client/|la documentation du projet AriseID]] d'Arise pour utiliser une authentification PHP. 
- 
- 
-====== Comment utiliser l'authentification LDAP avec PHP ====== 
- 
-Cela peut etre utile pour filtrer l'acces à un site d'assoce, organiser un systeme de vote interne ... \\ 
- 
- 
-Voici une fonction PHP permettant de gérer l'authentification LDAP : 
- 
-<code php> 
-function LDAP_login($login,$pass) { 
-    $ldap = ldap_connect("ldaps://ldap.iiens.net"); 
-    if(!$ldap) die("Serveur LDAP innaccessible"); 
- 
-    if(!ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3)) 
-        echo "Protocole LDAP v3 non disponible => TLS non supporté"; 
- 
-    $dn = "uid=$login,ou=People,o=aRiSE,c=fr"; 
-    if (@!ldap_bind($ldap, $dn, $pass) ) 
-            // Erreur d'authentification 
-            return false; 
-</code> 
- 
-Si on arrive jusque ici, cela veut dire que l'utilisateur est correctement authentifié. Cela uniquement veut dire que le couple login/mot de passe est correct, mais on ne sait pas encore si l'utilisateur est autorisé à acceder à notre contenu ! 
-\\ Sur l'annuaire d'ARISE, il faut savoir que les anciens auront la possibilité de s'authentifier. 
- 
-Pour se faire, définissons un filtre, qui correspond uniquement aux personnes à qui on veut autoriser acces : 
-<code php> 
-    $filtre = "(assocemember=cine)";  // on veut autoriser les gens de l'assoce cine uniquement 
-        // ou "(promo=2008)"     // juste la promo 2008 (promo au sens date de sortie) 
-        // ou "(|(promo=2008)(promo=2007)(promo=2006))" désigne les 3 promos : le '|' désigne OU 
-        // ou "(&(sexe=F)(|(promo=2008)(promo=2007)(promo=2006)))" désigne les filles des 3 promos : le '&' désigne ET 
-</code> 
- 
-Puis spécifions les informations que nous voulons retirer, informations stoquées dans le compte LDAP (trombi quoi), en cas de succes.[[BR]] 
-si $attr est vide, tous les attributs vont etre retirés. Les attributs qui peuvent etre utiles sont : uidnumber (entier unique, identifiant numérique d'un eleve), nom, prenom, surnom, mail (iie), mail2 (mail externe, optionnel), assocemember, assocemaster, assoceowner, dateNaissance, promo, uid(=login sur perso) 
-<code php> 
-    $attr = array("uidnumber","prenom","surnom","mail","assoceowner","assocemaster"); 
-        // ou array();      // TOUS les champs. 
-        // ou array("dn"  // si vous ne voulez retirer le moins d'informations 
-</code> 
- 
-Lancons la recherche, et testons le retour 
-<code php> 
-    $res=ldap_search($ldap, $dn, $filter, $attr);    // on lance la recherche 
-    $info=ldap_get_entries($ldap, $res);             // on recupere les resultats 
-    $num=ldap_count_entries($ldap,$res);             // et le nombre d'entrees 
-    ldap_unbind($ldap);                              // on se deconnecte, on n'a plus besoin du LDAP 
- 
-    // Est ce que l'acces est autorisé ? 
-    if( $num!=1 ) 
-        return false; 
-</code> 
- 
- 
-A ce point du script, l'utilisateur est authentifié, et son acces est autorisé. Il peut etre utile (mais optionel) de retirer quelques informations sur le compte authentitifé. \\ Pour acceder aux informations du LDAP, voici la syntaxe générale : 
-<code php>    $info[$i][$field][$indice_field]  
-      // $i est l'indice qui correspond au numéro de l'entrée 
-      // $field est le nom du champ qui DOIT etre spécifié dans le tableau $attr 
-      // $indice_field est l'indice qui selectionne la valeur du champ $field pour ce numéro d'entrée $i  
-      //  (un annuaire LDAP est multivalué : un champ peut avoir plusieurs valeurs, pas comme avec une BDD relationelle) 
- 
-      // Si vous etes curieux, vous pouvez voir ce qu'affiche : 
-      echo "<pre>"; 
-      print_r($info); 
-      echo "</pre>"; 
-</code> 
- 
-Apres cette parenthese, terminons la fonctions 
-<code php> 
-    return $info[0];   // retourne la premiere entrée, celle qui concerne le compte authentifié 
-} 
-</code> 
- 
- 
-On peut donc utiliser la fonction comme suivant : 
-<code php> 
-    $user = LDAP_login($user, $pass); 
-    if($user) {    // user authentifié ! 
-        echo "Bonjour " . utf8_decode($user["prenom"][0]); 
-    // .......... 
-    } 
-    else echo "Utilisateur non authentifié"; 
-</code> 
-Notez l'utilisation de UTF8_DECODE pour exploiter les champs venus du ldap. 
- 
- 
-====== Voici un la fonction complete pour l'assoce mamiie : ====== 
- 
-<code php> 
-function LDAP_login($login,$pass) { 
-    $ldap = ldap_connect("ldaps://ldap.iiens.net"); 
-    if(!$ldap) die("Serveur LDAP innaccessible"); 
- 
-    if(!ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3)) 
-        echo "Protocole LDAP v3 non disponible => TLS non supporté"; 
- 
-    $dn = "uid=$login,ou=People,o=aRiSE,c=fr"; 
-    if (@!ldap_bind($ldap, $dn, $pass) )  
-            // Erreur d'authentification 
-            return false; 
- 
-    $filtre = "(assocemember=mamiie)"; 
-    $attr = array("prenom","surnom","nom"); 
- 
-    $res=ldap_search($ldap, $dn, $filter, $attr);    // on lance la recherche 
-    $info=ldap_get_entries($ldap, $res);             // on recupere les resultats 
-    $num=ldap_count_entries($ldap,$res);             // et le nombre d'entrees 
-    ldap_unbind($ldap);                              // on se deconnecte, on n'a plus besoin du LDAP 
- 
-    // Est ce que l'acces est autorisé ? 
-    if( $num!=1 ) 
-        return false; 
- 
-    return $info[0];   // retourne la premiere entrée, celle qui concerne le compte authentifié 
-} 
- 
-</code>