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.
...
- Présentation du service de wikis de listes : http://www.cru.fr/services/wiki/index
- Article de l'écho du CRU sur le service de wikis de listes : http://www.cru.fr/echo/13#le_wiki_un_nouveau_service_associe_aux_listes_de_diffusion
- Couplage Sympa / Dokuwiki / Shibboleth : http://www.sympa.org/faq/sympa_and_wiki_farm
- Module Dokuwiki : http://sourcesup.cru.fr/projects/dwshibb
- Utilisation du module Dokuwiki : http://www.sympa.org/contribs/shibbolethauth
- Poster présenté à TNC 2008 : http://www.sympa.org/_media/doc/poster-tnc2008_a4.pdf
- Article présenté à EUNIS 2008 : http://www.sympa.org/_media/faq/eunis2008.pdf
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
|