MediaWiki est un logiciel wiki utilisé par le très connu Wikipedia.
Several extensions allows one to configure SSO on MediaWiki:
Nous expliquons ici comment utiliser l'extension REMOTE_USER automatique.
L'extension est présentée ici : http://www.mediawiki.org/wiki/Extension:AutomaticREMOTE_USER
Il est possible de télécharger le code source ici : https://www.mediawiki.org/wiki/Special:ExtensionDistributor/Auth_remoteuser
Il faut installer Auth_remoteuser
dans le répertoire des extensions/
ve votre serveur MediaWiki :
cp -a Auth_remoteuser/ extensions/
Éditer ensuite les paramètres locaux MediaWiki
vi LocalSettings.php
require_once "$IP/extensions/Auth_remoteuser/Auth_remoteuser.php"; $wgAuth = new Auth_remoteuser();
Puis, configuration de l'extension, par exemple :
$wgAuthRemoteuserAuthz = true; /* Your own authorization test */ $wgAuthRemoteuserName = $_SERVER["HTTP_AUTH_CN"]; /* User's name */ $wgAuthRemoteuserMail = $_SERVER["HTTP_AUTH_MAIL"]; /* User's Mail */ $wgAuthRemoteuserNotify = false; /* Do not send mail notifications */ //$wgAuthRemoteuserDomain = "NETBIOSDOMAIN"; /* Remove NETBIOSDOMAIN\ from the beginning or @NETBIOSDOMAIN at the end of a IWA username */ /* User's mail domain to append to the user name to make their email address */ //$wgAuthRemoteuserMailDomain = "example.com"; // see http://www.mediawiki.org/wiki/Manual:Hooks/SpecialPage_initList // and http://www.mediawiki.org/w/Manual:Special_pages // and http://lists.wikimedia.org/pipermail/mediawiki-l/2009-June/031231.html // disable login and logout functions for all users function LessSpecialPages(&$list) { unset( $list['Userlogout'] ); unset( $list['Userlogin'] ); return true; } $wgHooks['SpecialPage_initList'][]='LessSpecialPages'; // http://www.mediawiki.org/wiki/Extension:Windows_NTLM_LDAP_Auto_Auth // remove login and logout buttons for all users function StripLogin(&$personal_urls, &$wgTitle) { unset( $personal_urls["login"] ); unset( $personal_urls["logout"] ); unset( $personal_urls['anonlogin'] ); return true; } $wgHooks['PersonalUrls'][] = 'StripLogin';
If necessary, use the code below to patch the extension:
sed -i "s/'wpPassword' => ''/'wpPassword' => 'none'/" extensions/Auth_remoteuser/Auth_remoteuser.body.php
You can use the code below for normalizing logins containing “_” in the extension:
sed -i '/$usertest = $this->getRemoteUsername();/a\ $usertest = str_replace( "_"," ", $usertest );' extensions/Auth_remoteuser/Auth_remoteuser.body.php
Configurer l'hôte virtuel Mediawiki comme n'importe quel autre hôte virtuel protégé.
<VirtualHost *:80> ServerName mediawiki.example.com PerlHeaderParserHandler Lemonldap::NG::Handler ... </VirtualHost>
server { listen 80; server_name mediawiki.example.com; root /path/to/application; # Requête interne d'authentification location = /lmauth { internal; include /etc/nginx/fastcgi_params; fastcgi_pass unix:/var/run/llng-fastcgi-server/llng-fastcgi.sock; # Ignorer les données postées fastcgi_pass_request_body off; fastcgi_param CONTENT_LENGTH ""; # Conserver le nom d'hôte original fastcgi_param HOST $http_host; # Conserver la requête originale (le serveur LLNG va recevoir /llauth) fastcgi_param X_ORIGINAL_URI $request_uri; } # Requêtes clients location / { auth_request /lmauth; auth_request_set $lmremote_user $upstream_http_lm_remote_user; auth_request_set $lmlocation $upstream_http_location; error_page 401 $lmlocation; try_files $uri $uri/ =404; ... include /etc/lemonldap-ng/nginx-lua-headers.conf; } location / { try_files $uri $uri/ =404; } }
Aller dans le manager et créer un nouvel hôte virtuel pour Mediawiki.
Configurer simplement la règle d'accès. Il est possible d'ajouter une règle pour la déconnexion :
Userlogout => logout_sso
On peut créer ces 2 en-têtes pour qu'ils corresponde au nom d'utilisateur et a son adresse mail (voir la configuration de l'extension) :
Auth-Cn => $cn Auth-Mail => $mail
Si LL::NG est utilisé par reverse-proxy, configurer l'en-tête Auth-User
,