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 DocuwikiDokuwiki.

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

...

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.unmigrated-wiki-markup

\[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.

...

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