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 [28/12/2010 18:46]
dani [Installer le plugin LemonLDAP pour DokuWiki]
tuto:webapps:llng:dokuwiki [13/07/2012 12:24] (Version actuelle)
dani [Version LDAP]
Ligne 13: Ligne 13:
   * Règle: accept   * Règle: accept
  
-Si par contre, vous voulez avoir une partie publique, et une privée, il faut deux règles distinctes:+Si par contre, vous voulez avoir une partie publique, et une privée, il faut un peu plus de règles
  
-  * Commentaire: 01login +  * Commentaire: 01data 
-  * Expression: ^/(?i)doku.php\?(.*)do=login(.*) +  * Expression: ^/data 
-  * Règle: accept+  * Règle: deny 
 + 
 +  * Commentaire: 02login 
 +  * Expression: ^/(?i)doku.php(/start)?\?(.*)do=login 
 +  * Règle: $groups =~ /\bwiki\b/ 
 + 
 +  * Commentaire: 03logout 
 +  * Expression: ^/(?i)doku.php(/start)?\?(.*)do=logout 
 +  * Règle: logout_app
  
   * Expression: default   * Expression: default
   * Règle: unprotect   * Règle: unprotect
  
-La première règle permet de rediriger les utilisateurs vers le portail d'authentification lorsqu'ils cliquent sur le bouton "Connexion". La seconde règle indique à LemonLDAP de ne pas contrôler l'accès au wiki (ce sont les ACL de dokuwiki qui gèreront ça)+La première règle permet de protéger l'accès au répertoire data, la seconde redirige les utilisateurs vers le portail d'authentification lorsqu'ils cliquent sur le bouton "Connexion", et n'autorise que les membres du groupe "wiki". La troisième règle intercepte le clique sur le bouton "Déconnexion" et redirige l'utilisateur sur le portail, enfin, la quatrième règle indique à LemonLDAP de ne pas contrôler l'accès au wiki (ce sont les ACL de dokuwiki qui gèreront ça)
  
 ==== En-têtes HTTP ==== ==== En-têtes HTTP ====
Ligne 45: Ligne 53:
  
 <code bash> <code bash>
-db domains setprop wiki.domain.tld DocumentRoot /opt/dokuwiki TemplatePath WebAppVirtualHost LemonLDAP enabled PHPBaseDir /tmp:/opt/dokuwiki +db domains set wiki.domain.tld domain DocumentRoot /opt/dokuwiki TemplatePath WebAppVirtualHost LemonLDAP enabled 
-signal-event domain-modify wiki.domain.tld+signal-event domain-create wiki.domain.tld
 </code> </code>
  
 ===== Installer le plugin LemonLDAP pour DokuWiki ===== ===== Installer le plugin LemonLDAP pour DokuWiki =====
 +
 +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). 
 +
 +==== 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 mail de l'utilisateur ($mail)
 +  * 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 Il suffit de copier/coller le code suivant dans le fichier inc/auth/lemonldapng.class.php
-<code php>+ 
 +<file php lemonldapng.class.php>
 <?php <?php
 /** /**
Ligne 96: Ligne 114:
     if(empty($this->cnf['header_mail'])) $this->cnf['header_mail'] = 'HTTP_USER_MAIL';     if(empty($this->cnf['header_mail'])) $this->cnf['header_mail'] = 'HTTP_USER_MAIL';
     if(empty($this->cnf['header_groups'])) $this->cnf['header_groups'] = 'HTTP_USER_GROUPS';     if(empty($this->cnf['header_groups'])) $this->cnf['header_groups'] = 'HTTP_USER_GROUPS';
-  } 
- 
-  function logOff(){ 
-    setcookie(DokuWiki, 'FALSE', time() - 600000, '/'); 
-    // Head the Lemon Logout page 
-    $location = array(); 
-    if ( preg_match("#https?://[^/]*#", $_SERVER["HTTP_REFERER"], $location)) { 
-    header('Location: '.$location[0].'/logout');         
-    } else { 
-        nice_die("Disconnection failed"); 
-    } 
   }   }
  
Ligne 135: Ligne 142:
   }   }
 } }
-</code>+</file>
  
 Il ne reste plus qu'à modifier la configuration de dokuwiki pour qu'il utilise ce nouveau plugin pour l'authentification, pour cela, il suffit de modifier le fichier conf/local.php, et de configurer: Il ne reste plus qu'à modifier la configuration de dokuwiki pour qu'il utilise ce nouveau plugin pour l'authentification, pour cela, il suffit de modifier le fichier conf/local.php, et de configurer:
Ligne 142: 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:
  
 <code php> <code php>
-$conf['auth']['lemonldapng']['debug'] = 0;+$conf['auth']['lemonldapng']['debug'] = 1;
 $conf['auth']['lemonldapng']['header_login'] = 'HTTP_AUTH_USER'; $conf['auth']['lemonldapng']['header_login'] = 'HTTP_AUTH_USER';
 $conf['auth']['lemonldapng']['header_name'] = 'HTTP_USER_NAME'; $conf['auth']['lemonldapng']['header_name'] = 'HTTP_USER_NAME';
Ligne 153: 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.1293558406.txt.gz
  • Dernière modification: 28/12/2010 18:46
  • de dani