tuto:webapps:llng:dokuwiki

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édentes Révision précédente
Prochaine révision
Révision précédente
tuto:webapps:llng:dokuwiki [21/03/2011 10:49]
dani [Installer le plugin LemonLDAP pour DokuWiki]
tuto:webapps:llng:dokuwiki [13/07/2012 12:24] (Version actuelle)
dani [Version LDAP]
Ligne 59: Ligne 59:
 ===== Installer le plugin LemonLDAP pour DokuWiki ===== ===== Installer le plugin LemonLDAP pour DokuWiki =====
  
-Il suffit de copier/coller le code suivant dans le fichier inc/auth/lemonldapng.class.php+Nous avons écrit 2 plugins permettant de s'authentifier avec LemonLDAP::NG. Ces plugins sont différents de celui proposé sur le site de LemonLDAP::NG (http://lemonldap-ng.org/documentation/1.0/applications/dokuwiki). La principal différence est qu'ils permettent d'utiliser les informations LDAP dans les ACL de dokuwiki (utilisateur et groupes)
  
-Ce plugin est différent de celui proposé sur le site de LemonLDAP::NG (http://lemonldap-ng.org/documentation/1.0/applications/dokuwiki). La principal différence est qu'il permet d'utiliser les informations LDAP dans les ACL de dokuwiki. Dokuwiki n'a pas besoin d'un accès au serveur LDAP, puisque ces informations sont transférées à dokuwiki par LemonLDAP::NG via des entêtes HTTP. Les informations LDAP en question sont:+==== Version LL::NG simple ==== 
 + 
 +Avec ce plugin, dokuwiki n'a pas besoin d'un accès au serveur LDAP, puisque ces informations sont transférées à dokuwiki par LemonLDAP::NG via des entêtes HTTP. Les informations LDAP en question sont:
   * le nom complet de l'utilisateur ($cn)   * le nom complet de l'utilisateur ($cn)
   * le mail de l'utilisateur ($mail)   * le mail de l'utilisateur ($mail)
   * la liste des groupes dont un utilisateur est membre ($groups)   * la liste des groupes dont un utilisateur est membre ($groups)
 +
 +Il suffit de copier/coller le code suivant dans le fichier inc/auth/lemonldapng.class.php
  
 <file php lemonldapng.class.php> <file php lemonldapng.class.php>
Ligne 145: Ligne 149:
 </code> </code>
  
-===== Configuration du plugin ===== 
 Le plugin ne nécessite pas réellement de configuration, mais vous pouvez toutefois changer le nom des entêtes HTTP, et activer le debug, par exemple: Le plugin ne nécessite pas réellement de configuration, mais vous pouvez toutefois changer le nom des entêtes HTTP, et activer le debug, par exemple:
  
Ligne 156: Ligne 159:
 </code> </code>
  
-Enjoy ;-)+L'avantage de ce plugin est qu'il ne nécessite aucun accès au serveur LDAP (idéal si le serveur Web se trouve dans une DMZ et ne peut pas accéder directement à l'annuaire). L'inconvénient est que certaines fonctions ne sont plus disponibles, comme l'abonnement aux modifications des pages (si un utilisateur s'abonne à une page, son login est bien inscrit à la liste, mais il n'y a aucune information persistante sur son adresse mail) 
 + 
 +==== Version LDAP ==== 
 +Ce plugin là surcharge simplement le plugin LDAP fournit de base, il ne remplace que la vérification du mot de passe. Ce fichier est à placer dans inc/auth/httpldap.class.php 
 + 
 +<file php httpldap.class.php> 
 + 
 +<?php 
 +/** 
 + * HTTP/LDAP authentication backend 
 + * HTTP (your web server) handle the authentication 
 + * LDAP handle user informations, and group membership 
 + * This plugin have been written to work with LemonLDAP::NG WebSSO 
 + * @license   GPL 2 (http://www.gnu.org/licenses/gpl.html) 
 + * @author    Daniel Berteaud <daniel@firewall-services.com> 
 + */ 
 + 
 +require("ldap.class.php"); 
 +class auth_httpldap extends auth_ldap { 
 +    var $cnf = null; 
 + 
 +    /** 
 +    * Posible things an auth backend module may be able to 
 +    * do. The things a backend can do need to be set to true 
 +    * in the constructor. 
 +    */ 
 +    var $cando = array ( 
 +        'addUser'     => false, // can Users be created? 
 +        'delUser'     => false, // can Users be deleted? 
 +        'modLogin'    => false, // can login names be changed? 
 +        'modPass'     => false, // can passwords be changed? 
 +        'modName'     => false, // can real names be changed? 
 +        'modMail'     => false, // can emails be changed? 
 +        'modGroups'   => false, // can groups be changed? 
 +        'getUsers'    => false, // can a (filtered) list of users be retrieved? 
 +        'getUserCount'=> false, // can the number of users be retrieved? 
 +        'getGroups'   => false, // can a list of available groups be retrieved? 
 +        'external'    => true, // does the module do external auth checking? 
 +        'logout'      => true,  // can the user logout again? (eg. not possible with HTTP auth) 
 +    ); 
 + 
 + 
 +    /** 
 +     * Constructor 
 +     */ 
 +    function auth_httpldap() { 
 +        global $conf; 
 +        $this->cnf = $conf['auth']['ldap']; 
 + 
 +        // ldap extension is needed 
 +        if(!function_exists('ldap_connect')) { 
 +            if ($this->cnf['debug']) 
 +                msg("LDAP err: PHP LDAP extension not found.",-1,__LINE__,__FILE__); 
 +            $this->success = false; 
 +            return; 
 +        } 
 + 
 +        if(empty($this->cnf['groupkey']))   $this->cnf['groupkey'  = 'cn'; 
 +        if(empty($this->cnf['userscope']))  $this->cnf['userscope' = 'sub'; 
 +        if(empty($this->cnf['groupscope'])) $this->cnf['groupscope'] = 'sub'; 
 +    } 
 + 
 + 
 +    /** 
 +    * Check if REMOTE_USER is set 
 +    */ 
 +    function trustExternal($user,$pass,$sticky=false){ 
 +        global $USERINFO; 
 +        $success = false; 
 +        $username = $_SERVER['REMOTE_USER']; 
 +        // print info if debug is enabled 
 +        if ($this->cnf['debug']){ 
 +          msg('LemonLDAP::NG Login Name: '.htmlspecialchars($username),0,__LINE__,__FILE__); 
 +        } 
 +        if (!empty($username)){ 
 +            $USERINFO = $this->getUserData($user,true); 
 +            $success = true; 
 +            $_SESSION[DOKU_COOKIE]['auth']['user'] = $username; 
 +            $_SESSION[DOKU_COOKIE]['auth']['info'] = $USERINFO; 
 +        } 
 +        // Deny access if user is not found in LDAP 
 +        // This should never happen 
 +        if (!empty($USERINFO['dn'])){ 
 +            $success = false; 
 +        } 
 +        return $success; 
 +    } 
 +
 +</file> 
 + 
 +La configuration de ce plugin est parfaitement identique au module LDAP de base, exemple: 
 +<code php> 
 +$conf['authtype'] = 'httpldap'; 
 +$conf['auth']['ldap']['server'] = "ldap://localhost:389"; 
 +$conf['auth']['ldap']['version'] = '3'; 
 +$conf['auth']['ldap']['usertree'] = 'ou=Users,dc=domain,dc=tld'; 
 +$conf['auth']['ldap']['grouptree'] = 'ou=Groups,dc=domain,dc=tld'; 
 +$conf['auth']['ldap']['userfilter'] = '(&(uid=%{user})(objectClass=inetOrgPerson))'; 
 +$conf['auth']['ldap']['groupfilter'] = '(&(objectClass=posixGroup)(memberUid=%{user}))'; 
 +</code> 
 + 
 +La seule partie importante ici, c'est **$conf['authtype'] = 'httpldap';** (le reste se configure comme le plugin ldap de base) 
  • tuto/webapps/llng/dokuwiki.1300700942.txt.gz
  • Dernière modification: 21/03/2011 10:49
  • de dani