Pages enfant
  • CASification de Dokuwiki

Comparaison des versions

Légende

  • Ces lignes ont été ajoutées. Ce mot a été ajouté.
  • Ces lignes ont été supprimées. Ce mot a été supprimé.
  • La mise en forme a été modifiée.
Commentaire: Migrated to Confluence 5.3

Cet espace présente les expériences de CASification de Dokuwiki.

CASification par phpCAS

Inspiration : http://www.middleware.vt.edu/doku.php?id=middleware:dokuwiki

Alternative : http://gb01.no-ip.com/cas/

Fichiers à modifier

Fichier conf/dokuwiki.php

Bloc de code
$conf['authtype']    = 'cas';

/* Ldap Options */
$conf['auth']['ldap']['server']      = 'ldap://ldap.univ.fr';
$conf['auth']['ldap']['usertree']    = 'ou=people,dc=univ,dc=fr';
$conf['auth']['ldap']['userfilter']  = '(uid=%{user})';

Fichier doku.php :

Bloc de code
  if ($ACT == 'login') {
    phpCAS::setFixedServiceURL(
      'http://www.univ.fr/wiki/doku.php?'.$_SERVER["QUERY_STRING"]);
    phpCAS::forceAuthentication();
  }

  if($ACT == 'logout') {
    phpCAS::logout();
  }

Fichier inc/auth/cas.class.php

Bloc de code
<?
require_once(DOKU_INC.'inc/auth/ldap.class.php');
include_once('CAS/CAS.php');

phpCAS::client(CAS_VERSION_2_0, 'cas.univ.fr', 443, 'cas');

class auth_cas extends auth_ldap {
    function auth_cas() {
        global $conf;
        $this->cando['external'] = true;
        $this->auth_ldap();
    }

    function trustExternal($user,$pass,$sticky=false){
        global $USERINFO;
        global $conf;
        $sticky ? $sticky = true : $sticky = false; //sanity check

        $session = $_SESSION[$conf['title']]['auth'];

        if(phpCAS::isAuthenticated()) {
            $user = phpCAS::getUser();

            if(isset($session)) {
                $_SERVER['REMOTE_USER'] = $user;
                $USERINFO = $session['info'];
                $_SESSION[$conf['title']]['auth']['user'] = $user;
                $_SESSION[$conf['title']]['auth']['pass'] = $session['pass'];
                $_SESSION[$conf['title']]['auth']['info'] = $USERINFO;
                $_SESSION[$conf['title']]['auth']['buid'] = $session['buid'];
            }
            else {
                $USERINFO = $this->getUserData($user);
                $_SERVER['REMOTE_USER'] = $user;
                $_SESSION[$conf['title']]['auth']['user'] = $user;
                $_SESSION[$conf['title']]['auth']['pass'] = $pass;
                $_SESSION[$conf['title']]['auth']['info'] = $USERINFO;
                $_SESSION[$conf['title']]['auth']['buid'] = auth_browseruid();
            }

            return true;
        }

        return false;
    }
}
?>

Pour forcer le login à l'appel de l'url de base du wiki : Fichier index.php :

Bloc de code
header("Location: doku.php?do=login");



Couplage entre DokuWiki, Shibboleth et Sympa

Ce qui suit est une copie de http://www.cru.fr/echo/14#couplage_entre_dokuwiki_shibboleth_et_sympa

La fonctionnalité de wikis de listes présentée dans le précédent numéro de l'écho du CRU a été rendue possible par un couplage entre ces trois outils : DokuWiki, Shibboleth et Sympa. Afin de faciliter la mise en place d'une telle solution, nous avons résumé dans une page du site de Sympa le principe de ce système et les informations sur les outils nécessaires (page en anglais).

Il est maintenant possible de disposer d'un wiki pour chaque liste de diffusion hébergée sur un des serveurs du CRU. Ce service adopte progressivement une authentification basée sur la fédération d'identité.

Le schéma ci-dessous représente (1) l'authentification via Shibboleth pour Sympa et Dokuwiki et (2) la gestion des autorisations via l'interface SOAP de Sympa. Ces deux opérations sont permises par l'emploi du plugin Dokuwiki présenté au paragraphe suivant.

[note : schéma malheureusement inaccessible actuellement]

Le site web du CRU utilise également ce module.

Quelques précisions sur l'ensemble, maintenant.

Le module dwshib pour Dokuwiki

Le CRU a créé un module pour Dokuwiki permettant de réaliser l'authentification des utilisateurs via Shibboleth et l'autorisation via Sympa. Ce module est la pierre angulaire du couplage Sympa / Dokuwiki / Shibboleth qui permet notamment le bon fonctionnement des wikis de liste de diffusion du CRU. Toutes les informations pour le téléchargement, l'installation et l'utilisation de ce module sont disponibles sur le site de Sympa.

Publications liées à cette solution

Deux publications ont été rédigées afin de présenter cet outil : le CRU a présenté un poster à la conférence TNC 2008, à Bruges ainsi qu'un article à la conférence EUNIS 2008.

Liens :

ACL Dokuwiki basée sur attribut ldap

En plus d'une authentification CAS, il est possible d'utiliser le backend ldap (http://www.dokuwiki.org/auth:ldap) afin de recuperer le groupe (ldap) de l'utilisateur connecté. Ainsi nous pouvons definir un acces granulaire (ACL) a differents namespaces/pages dokuwiki en fonction du groupe de l'utilisateur. Pour ce faire il faut "mapper" un group avec le "groupfilter" ,cf code ci-dessous:

dans conf/local.php

Bloc de code
$conf['auth']['ldap']['server'] = 'ldap://ldap.domain.tld:389';
$conf['auth']['ldap']['port'] = '389';
$conf['auth']['ldap']['usertree'] = 'ou=People, dc=domain,dc=tld';
$conf['auth']['ldap']['grouptree'] = 'ou=Group, ou=system,dc=domain,dc=tld';
$conf['auth']['ldap']['userfilter'] = '(&(uid=%{user})(objectClass=posixAccount))';
$conf['auth']['ldap']['groupfilter'] = '(&(objectClass=posixGroup)(|(gidNumber=%{gid})(memberUid=%{user})))';
$conf['auth']['ldap']['binddn'] = 'cn=binder, ou=system,dc=domain,dc=tld';
$conf['auth']['ldap']['bindpw'] = 'secret';
$conf['auth']['ldap']['version'] = '3';

Exemple d'ACL

Bloc de code
[jehan@localhost ~/sshfs/public/dokuwiki/conf]
$ cat acl.auth.php
# acl.auth.php
# Don't modify the lines above
# Access Control Lists
# Auto-generated by install script
# Date: Fri, 09 Jan 2009 17:41:08 +0100
*    @ALL    1
*    @user    1
communaute:*    @mci    4
communaute:*    @user    0
communaute:*    @ALL    0
communaute:*    @ip%3a192%2e168%2e50    8
documentations:*    proc    8
partenaires:*    @citi    4
partenaires:*    @user    0
partenaires:*    @ALL    0