Extension:Auth remoteuser

This page is a translated version of the page Extension:Auth remoteuser and the translation is 100% complete.
A ne pas confondre avec Extension:AuthRemoteUser.
Manuel des extensions MediaWiki
Auth_remoteuser
État de la version : stable
Implémentation Identité de l'utilisateur , Accroche
Description Connecte automatiquement les utilisateurs s'ils sont déjà authentifiés par une source distante (par exemple la variable environnement REMOTE_USER).
Auteur(s)
Dernière version 2.1.1
MediaWiki >= 1.39.0
PHP 5.4+
Modifie la base
de données
Non
Composer mediawiki/auth-remoteuser
Licence Licence publique générale GNU v2.0 ou supérieur
Téléchargement
README

  • $wgAuthRemoteuserUserName
  • $wgAuthRemoteuserUserNameReplaceFilter
  • $wgAuthRemoteuserUserNameBlacklistFilter
  • $wgAuthRemoteuserUserNameWhitelistFilter
  • $wgAuthRemoteuserUserPrefs
  • $wgAuthRemoteuserUserPrefsForced
  • $wgAuthRemoteuserUserUrls
  • $wgAuthRemoteuserAllowUserSwitch
  • $wgAuthRemoteuserRemoveAuthPagesAndLinks
  • $wgAuthRemoteuserPriority

Legacy parameters:

  • $wgAuth
  • $wgAuthRemoteuserAuthz
  • $wgAuthRemoteuserDomain
  • $wgAuthRemoteuserName
  • $wgAuthRemoteuserMail
  • $wgAuthRemoteuserNotify
  • $wgAuthRemoteuserDomain
  • $wgAuthRemoteuserMailDomain
Téléchargements trimestriels 227 (Ranked 27th)
Traduire l’extension Auth remoteuser
Problèmes Tâches ouvertes · Signaler un bogue

L'extension Auth remoteuser connecte automatiquement les utilisateurs s'ils sont déjà authentifiés par une source distante arbitraire. L'extension fait correspondre le nom d'utilisateur distant donné, à un nom d'utilisation existant dans la base de données locale du wiki (ou le crée d'abord s'il a l'autorisation pour le faire). La source externe assume la responsabilité totale de l'authentification de cet utilisateur.

Cela permet de s'intégrer au système d'authentification du serveur Web (par exemple via la variable environnement REMOTE_USER, qui est définie par HTTP-Auth[1], LDAP[2], CAS[3], PAM[4], etc.) ou tout autre type d'autentification externe (authentification par client SSL[5], comptes utilisateur fournis par différents logiciels de forum, etc.).

Installation

  • Téléchargez et placez le(s) fichier(s) dans un répertoire appelé Auth_remoteuser dans votre dossier extensions/.
    Les développeurs et les contributeurs au code doivent à la place installer l'extension à partir de Git en utilisant:cd extensions/
    git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/Auth_remoteuser
  • Ajoutez le code suivant à la fin de votre fichier LocalSettings.php  :
    wfLoadExtension( 'Auth_remoteuser' );
    
  •   Fait – Accédez à Special:Version sur votre wiki pour vérifier que l'extension a bien été installée.

Configuration

Prenez en compte les autorisations globales de MediaWiki pour la création de compte (createaccount ou autocreateaccount) dans votre fichier LocalSettings.php. Au moins une d'entre elles doit valoir true pour que les utilisateurs anonymes permettent à cette extension de créer des comptes pour les utilisateurs inconnus de la base de données du wiki. Si vous initialiser à false, alors la connexion automatique ne fonctionne que pour les utilisateurs qui ont déjà un compte wiki.

Exemples
  1. // l'extension peut créer des comptes, parce que tous les utilisateurs anonymes le peuvent.
    $wgGroupPermissions['*']['createaccount'] = true;
    
  2. // si la création d'un compte par des utilisateurs anonymes est interdite, permettez qu'il soit créé automatiquement (par l'extension).
    $wgGroupPermissions['*']['createaccount'] = false;
    $wgGroupPermissions['*']['autocreateaccount'] = true;
    
  3. // seuls les utilisateurs qui se connectent automatiquement si le wiki le sait déjà.
    $wgGroupPermissions['*']['createaccount'] = false;
    $wgGroupPermissions['*']['autocreateaccount'] = false;
    

Paramètres

Ajoutez les variables globales suivantes nécessaires dans votre LocalSettings.php pour adapter le comportement des extensions à vos besoins spécifiques. Les valeurs par défaut de chaque variable globale sont marquées du commentaire // default dans la section exemples.

Variables globales Description et exemples
$wgAuthRemoteuserUserName Définir le ou les noms à utiliser pour le mappage dans la base de données utilisateur locale du wiki. Cela peut être une simple string, une Closure[6], ou un tableau mixte de strings et / ou Closure. Si la valeur est null, l'extension utilise par défaut les variables d'environnement REMOTE_USER et REDIRECT_REMOTE_USER. Le premier nom de la liste fournie, qui peut être utilisé comme le nom valide d'un utilisateur de MediaWiki, sera utilusé pour la connexion (soit en se connectant à un compte wiki existant, ou en le créant d'abord) :
  1. $wgAuthRemoteuserUserName = null; // par défaut
    
  2. // même comportement que pour la valeur par défaut 'null'.
    $wgAuthRemoteuserUserName = [
        $_SERVER[ 'REMOTE_USER' ],
        $_SERVER[ 'REDIRECT_REMOTE_USER' ]
    ];
    
  3. // autre source distante pour le ou les noms d'utilisateur.
    $wgAuthRemoteuserUserName = getenv( 'LOGON_USER' );
    
  4. $wgAuthRemoteuserUserName = ""; // l'évaluation ne rend rien.
    
  5. // ceci n'est pas conseillé car cela va évaluer chaque visiteur
    // du même wiki à l'utilisateur 'Everybody'.
    $wgAuthRemoteuserUserName = "Everybody";
    
  6. // créez une closure au lieu de fournir les chaînes directement.
    $wgAuthRemoteuserUserName = function() {
        $credentials = explode( ':', $_SERVER[ 'HTTP_AUTHORIZATION' ] );
        $username = $credentials[0];
        $password = $credentials[1];
        return MyOwnAuthorizer::authenticate( $username, $password ) ? $username : '';
    };
    
  7. // lorsque vous utilisez l'extension VisualEditor créez un utilisateur 'Parsoid' spécifique pour
    // verrouiller les wikis (pas de permission de lecture anonyme), lorsque Parsoid est en cours d'exécution
    // sur localhost.
    $wgAuthRemoteuserUserName = [
        $_SERVER[ 'REMOTE_USER' ],
        $_SERVER[ 'REDIRECT_REMOTE_USER' ],
        $_SERVER[ 'REMOTE_ADDR' ] == '127.0.0.1' ? 'parsoid' : ''
    ];
    
$wgAuthRemoteuserUserNameReplaceFilter L'extension est livrée avec des filtres prédéfinis pour les noms d'utilisateurs distants (qui utilisent l'accroche fournie). Si vous souhaitez remplacer quelque chose, définissez un tableau d'expressions de recherche et de remplacement dans la variable de configuration suivante (chaque motif peut aussi être une expression régulière dans la syntaxe PCRE[7]) :
  1. $wgAuthRemoteuserUserNameReplaceFilter = null; // valeur par défaut
    
  2. $wgAuthRemoteuserUserNameReplaceFilter = [
        '_'                   => ' ',       // remplacer les caractères soulignés par des espaces
        '@INTRA.EXAMPLE.COM$' => '',        // supprimer l'accueil Kerberos de la fin
        '^domain\\'           => '',        // supprimer le domaine NTLM au début
        'johndoe'             => 'Admin',   // redéfinir l'utilisateur johndoe
        '/JaNeDoE/i'          => 'Admin',   // redéfinir toutes les versions de janedoe qui ne sont pas sensibles à la casse
        '^(.*)$'              => 'auto_$1', // préfixer la chaîne 'auto_'
        '^cn=(.*),dc=com$'    => '$1',      // obtenir le nom imbriqué d'utilisateur
        '^([^,]*),(.*)$'      => '$2 $1'    // réorganiser les parties du nom
    ];
    
$wgAuthRemoteuserUserNameBlacklistFilter Si vous voulez empêcher certains noms de se connecter automatiquement, mettez-les en liste noire avec le filtre suivant. Vous pouvez passer une liste de noms, où chacun peut aussiv être une expression régulière dans la syntaxe PCRE :
  1. $wgAuthRemoteuserUserNameBlacklistFilter = null; // valeur par défaut
    
  2. $wgAuthRemoteuserUserNameBlacklistFilter = [
        'johndoe',
        'janedoe',
        '/john/i', // correspond à toutes les versions de 'john' non sensibles à la casse
        '^f_'      // correspond à tous les utilisateurs qui commencent par 'f_'
    ];
    
$wgAuthRemoteuserUserNameWhitelistFilter L'opération opposée à UserNameBlacklistFilter peut être réalisée en utilisant le filtre suivant qui autorise la connexion automatique au lieu de l'interdire :
  1. $wgAuthRemoteuserUserNameWhitelistFilter = null; // valeur par défaut
    
  2. $wgAuthRemoteuserUserNameWhitelistFilter = [
        'john',
        'jane'
    ];
    
$wgAuthRemoteuserUserPrefs

$wgAuthRemoteuserUserPrefsForced

Lorsque vous avez des informations supplémentaires sur l'utilisateur disponibles dans votre environnement, qui peuvent être liées à un utilisateur créé, par exemple une adresse courriel ou un vrai nom, utilisez l'une des variables de configuration suivantes. Soit UserPrefs ou UserPrefsForced, qui les applique aux nouveaux utilisateurs seulement, ou qui les force à les appliquer à chaque demande. Cela peut être utile si vous ne voulez pas que l'utilisateur modifie cette préférence à l'intérieur de MediaWiki (par exemple, l'adresse courriel de votre entreprise fournie par une source distante). On attend un tableau de paires clé-valeur pour lesquelles realname et email correspondent au vrai nom et à l'adresse courriel des nouveaux utilisateurs. Toute autre paire de valeurs de clé spécifiée est mappée sur une préférence utilisateur du même nom. Mais notez les MediaWikis $wgDefaultUserOptions et $wgHiddenPrefs pour déclarer les options de préférence des utilisateurs. Dans la plupart des cas, ces variables globales sont mieux adaptées à la définition d'une valeur par défaut et pour empêcher la modification.
  1. $wgAuthRemoteuserUserPrefs = null;       // valeur par défaut
    $wgAuthRemoteuserUserPrefsForced = null; // valeur par défaut
    
  2. $wgAuthRemoteuserUserPrefs = [
        'realname' => $_SERVER[ 'AUTHENTICATE_DISPLAYNAME' ],
        'language' => 'en',
        'disablemail' => 0
    ];
    // l'adresse courriel des utilisateurs ne doit pas être modifiée à l'intérieur de MediaWiki.
    $wgAuthRemoteuserUserPrefsForced = [
        'email' => $_SERVER[ 'AUTHENTICATE_MAIL' ]
    ];
    
  3. // à la place Utilisez la variable globale MediaWiki pour l'option de préférence.
    $wgDefaultUserOptions[ 'disablemail' ] = 0;
    // et désactivez-la pour qu'elle ne soit pas modifiable par l'utilisateur.
    $wgHiddenPrefs[] = 'disablemail';
    // mais modifiez-la en fonction du type d'utilisateur distant (utilise la
    // caractéristique de closure décrite ci-dessous). Par exemple, s'il existe des
    // comptes d'invité identifiés par un ''g_'' au début de votre
    // source distante, qui n'ont pas d'adresse courriel valide, alors
    // désactivez l'option spécifiquement pour ces types de comptes.
    $wgAuthRemoteuserUserPrefsForced = [
        'disablemail' => function ( $metadata ) {
            $name = $metadata[ 'remoteUserName' ];
            return ( preg_match( '/^g_/', $name ) ) ? 1 : 0;
        }
    ];
    

Vous pouvez spécifier une fonction anonyme pour les valeurs aussi. Ces closures sont appelées lorsque la valeur actuelle est nécessaire, et non quand elle est déclarée à l'intérieur de votre LocalSettings.php. Le premier paramètre donné à la fonction est un tableau associatif avec les clés suivantes :

  • userId — ID de l'utilisateur dans la base de données locale wiki ou 0 s'il est nouveau ou anonyme
  • remoteUserName — valeur donnée par l'environnement
  • filteredUserName — après avoir exécuté l'accroche pour filtrer les noms d'utilisateurs
  • canonicalUserName — représentation dans la base de données wiki locale
  • canonicalUserNameUsed — nom d'utilisateur utilisé pour la session en cours

Prenons comme exemple le cas suivant d1ns lequel une fonction coûteuse (en temps) n'est exécutée qu'une seule fois par utilisateur et non à chaque demande :

  1. $wgAuthRemoteuserUserPrefs = [
        'email' => function( $metadata ) use ( $rpc ) {
            $name = $metadata[ 'remoteUserName' ];
            // appel de procédure coûteuse pour obtenir une adresse courriel
            return $rpc->query( 'email', $name );
        }
    ];
    
$wgAuthRemoteuserUserUrls Vous pouvez remplacer les URL dans MediaWiki, si votre source distante est mieux adaptée pour gérer un comportement spécifique. Par exemple, par défaut, aucun utilisateur connecté automatiquement n'est autorisé à se déconnecter (car il sera automatiquement connecté à nouveau lors de la prochaine demande). Mais peut-être que votre source distante doit gérer cette déconnexion (pour que, avec la prochaine demande, il n'y ait plus de nom d'utilisateur distant fourni à cette extension). Définir une URL appropriée pour l'une des clés suivantes du tableau associatif $wgAuthRemoteuserUserUrls :
  • logout
Fournir une URL de redirection pour la déconnexion de l'utilisateur. Selon vos autres paramètres de configuration de l'extension, cela remplacera soit le lien du bouton de déconnexion dans la barre d'URL personnelle de l'utilisateur, soit redirigera ce dernier après un appel à la page spéciale Special:UserLogout. Accepte une string ou une closure. Si le type est closure, alors on doit retourner une chaîne avec une URL valide (externe ou interne). La closure récupère comme premier paramètre le même tableau que les closures des préférences utilisateur (voir leur description).
  1. $wgAuthRemoteuserUserUrls = null; // valeur par défaut
    
  2. // rediriger vers la page de connexion de l'utilisateur au lieu de la page de déconnexion par défaut.
    // c'est le comportement par défaut si le changement d'utilisateur est autorisé.
    $wgAuthRemoteuserUserUrls = [
        'logout' => 'Special:UserLogin'
    ];
    
  3. // rediriger vers l'hôte du contrôleur de domaine de l'entreprise pour la déconnexion.
    $wgAuthRemoteuserUserUrls = [
        'logout' => function( $metadata ) {
            $user = $metadata[ 'remoteUserName' ];
            return 'https://company.example.com/?logout=' . $user;
        }
    ];
    
$wgAuthRemoteuserAllowUserSwitch Par défaut, cette extension imite le comportement des versions Auth_remoteuser antérieures à la v2.0.0, qui interdisent d'utiliser un autre utilisateur local, quand celui-ci a été identifié par la source distante. Vous pouvez modifier ce comportement avec la configuration suivante :
  1. $wgAuthRemoteuserAllowUserSwitch = false; // valeur par défaut
    
  2. $wgAuthRemoteuserAllowUserSwitch = true;
    
$wgAuthRemoteuserRemoveAuthPagesAndLinks En tant que fournisseur de session immuable SessionProvider (voir le paramètre AllowUserSwitch ci-dessus), toutes les pages spéciales et les liens de connexion / déconnexion pour l'authentification ne sont plus nécessaires par l'utilisateur identifié. Si vous souhaitez toujours qu'ils soient affichés, par exemple si vous utilisez d'autres fournisseurs de session en plus de celui-ci, alors définissez les éléments suivants :
  1. $wgAuthRemoteuserRemoveAuthPagesAndLinks = true; // valeur par défaut
    
  2. $wgAuthRemoteuserRemoveAuthPagesAndLinks = false;
    
$wgAuthRemoteuserPriority Si vous utilisez d'autres extensions de SessionProvider en plus de celle-ci, vous devez spécifier leur signification en utilisant une priorité ascendante :
  1. $wgAuthRemoteuserPriority = 50; // valeur par défaut
    
  2. $wgAuthRemoteuserPriority = SessionInfo::MAX_PRIORITY;
    

Anciens paramètres

Vous pouvez encore utiliser l'ensemble des anciens paramètres des versions antérieures à la v2.0.0 mais leur emploi est obsolète en faveur des nouveaux paramètres :

$wgAuthRemoteuserAuthz = true; /* votre propre test d'autorisation */
$wgAuthRemoteuserName = $_SERVER["AUTHENTICATE_CN"]; /* nom d'utilisateur */
$wgAuthRemoteuserMail = $_SERVER["AUTHENTICATE_MAIL"]; /* courriel de l'utilisateur */
$wgAuthRemoteuserNotify = false; /* ne pas envoyer de notifications par courriel */
$wgAuthRemoteuserDomain = "NETBIOSDOMAIN"; /* supprimez NETBIOSDOMAIN\ au début ou @NETBIOSDOMAIN à la fin du nom des utilisateurs IWA */
/* domaine courriel de l'utilisateur, à ajouter au nom d'utilisateur pour créer son adresse courriel */
$wgAuthRemoteuserMailDomain = "example.com";

Accroches fournies

Lorsque vous devez traiter avec votre nom d'utilisateur distant avant qu'il ne puisse être utilisé comme identifiant dans la liste des utilisateurs du wiki, par exemple pour retirer un principal Kerberos de la fin, pour remplacer des caractères non valides ou mettre certains noms en liste noire, utilisez l'accroche AuthRemoteuserFilterUserName fournie par cette extension. Voir simplement la documentation à propos des accroches MediaWiki pour connaître la manière d'enregistrer des fonctions supplémentaires sur cette accroche. Il fournit dans le premier paramètre, le nom de l'utilisateur distant en référence à la fonction d'accroche. Si la fonction renvoie false, le nom d'utilisateur distant sera ignoré pour une connexion automatique. (voir les paramètres $wgAuthRemoteuserUserNameReplaceFilter, $wgAuthRemoteuserUserNameBlacklistFilter ou $wgAuthRemoteuserUserNameWhitelistFilter pour les filtres prédéfinis qui utilisent cette accroche).

Configurer différentes sources distantes

définir la variable d'environnement REMOTE_USER

Cette variable d'environnement peut être initialisée par de nombreux systèmes d'authentification différents et leur configuration dépend fortement du système que vous utilisez. Vous pouvez toujours utiliser phpinfo(); pour vérifier le contenu de REMOTE_USER et pour résoudre les problèmes de votre configuration. Ce qui suit sont des exemples de différents environnements de serveurs Web et la manière de déclarer un nom d'utilisateur dans cette variable d'environnement.

Apache

Voir la documentation Apache pour les détails. Vous pouvez utiliser mod_auth_ldap, mod_auth_cas, mod_auth_pam, mod_auth_kerb, mod_auth_vas4, ou tout autre module d'authentification qui utilise REMOTE_USER. Une fois que vous avez vérifié que la variable d'environnement REMOTE_USER est initialisée avec le nom d'utilisateur approprié, continuez l'installation ou la configuration de l'extension. Quelques exemples :

  • Pour une authentification HTTP simple, ajoutez ce .htaccess :
AuthType Digest
AuthName Wiki
AuthUserFile /etc/passwd-apache
Require valid-user
La variable d'environnement REMOTE_USER est évaluée par défaut à partir de l'extension, donc le code suivant est tout ce dont vous avez besoin dans votre LocalSettings.php :
wfLoadExtension( 'Auth_remoteuser' );
AuthType VAS4
AuthVasRemoteUserMap default
AuthVasUseBasic On
AuthName Wiki
Require valid-user
Maintenant, la variable d'environnement REMOTE_USER contient le nom principal complet, donc supprimez le realm du nom d'utilisateur à l'intérieur de votre LocalSettings.php avec :
wfLoadExtension( 'Auth_remoteuser' );
$wgAuthRemoteuserUserNameReplaceFilter = [
    '@INTRA.EXAMPLE.COM$' => ''
];

Kerberos SSO AD

Prérequis :

  1. mod_auth_kerb
  2. mod_auth_ldap
  3. mod_authnz_ldap

Pour les installer et les activer dans Devuan :

apt install libapache2-mod-auth-kerb
a2enmod authnz_ldap

Configurer Kerberos dans le système d'exploitation (longue histoire raccourcie) :

  1. Rejoindre le domaine AD :
    1. realm join corp.ds.company.net -U domain_user_with_rights_to_join --computer-ou="use dsquery computer in windows cmd domain joined machine to get the value" --verbose
  2. Générer le clavier sur le serveur Windows AD cmd :
    1. ktpass -princ HTTP/en.mediawiki.company.net@CORP.DS.COMPANY.NET -mapuser mediawiki_windows_domain_user@CORP.DS.COMPANY.NET -pass mediawiki_windows_domain_user_secret_password -crypto all -ptype KRB5_NT_PRINCIPAL -out C:\Temp\en-mediawiki.keytab
    2. setspn -A HTTP/en.mediawiki.company.net@CORP.DS.COMPANY.NET mediawiki_windows_domain_user@CORP.DS.COMPANY.NET

Fichier con de Apache :

AuthType Kerberos
Krb5Keytab /path/to/your/keytab_file.keytab
KrbServiceName Any
KrbLocalUserMapping On
AuthLDAPBindDN "user_name_to_authenticate_to_LDAP_server"
AuthLDAPBindPassword "password_for_the_user_from_above"
AuthLDAPURL "http://ldap_server_url/DC=CORP,DC=DS,DC=COMPANY,DC=NET?sAMAccountName,mail,displayName?sub?(objectClass=*)"
Require ldap-attribute attribute="value"

Il est nécessaire d'utiliser l'autorisation LDAP avec Kerberos SSO[9] si vous voulez obtenir les informations utilisateur (courriel, nom réel) de AD.

Les informations de LDAP doivent être publiées aux variables d'environnement AUTHORIZE_, donc assurez-vous de les utiliser, pas AUTHENTICATE_ dans LocalSettings.php.

L'utilisation de ldap-group n'a pas publié les variables d'environnement pour moi, mais l'utilisation de ldap-attribute l'a fait (bogue de Apache ?).

IIS

En fonction de votre gestionnaire Internet Information Services (IIS), la navigation peut être un peu différente. Les instructions ci-dessous sont spécifiées pour un serveur d'entreprise exécutant IIS v7.5 sur Windows Server 2008 R2 Enterprise. (Croyez-moi, je voulais Linux et Apache mais IT ne les autorisent pas)

Pour permettre une simple authentification, utiliser les chemins suivants.

  1. IIS
  2. (Server Name) > Sites > Default Web Site
  3. De Voir les fonctionnalités double cliquer sur Authentification
  4. Disable — "Anonymous Authentication"
  5. Enable — "Windows Authentication" (HTTP 401 Challenge)

Support

Problèmes connus

Cette extension est gérée en tant que projet dans Phabricator. Vous y trouverez une liste de tous les problèmes connus et encore ouverts. S'il n'existe pas encore de tâche associée au problème ou à l'erreur que vous avez rencontrée, veuillez lire Comment rapporter les erreurs.

Comment déboguer

Lire le Manuel MediaWiki sur la manière de débogguer ou commencer par ceci :

  1. Activer les traces en initialisant $wgDebugLogFile dans votre fichier LocalSettings.php avec un fichier sur lequel votre serveur web a un accès en écriture.
  2. Interrogez votre installation MediaWiki comme vous l'avez fait quand l'erreur est apparue. Cette extension enregistre toutes ses sorties dans le canal [session] de votre fichier journal.
  3. Parcourez le fichier journal et recherchez toutes les lignes commençant par [session].
  4. Décidez si vous pouvez corriger l'erreur par vous-même ou si elle est liée au fonctionnement de cette extension. Si c'est le cas, veuillez lire Comment rapporter des erreurs.

Rapporter les erreurs

Réunir les informations relatives au déboggage (c'est à dire permettant de reproduire l'erreur) et :

Contribuer

Votre aide est la bienvenue pour améliorer cette extension. Lire Comment devenir un hacker MediaWiki, prendre un des problèmes ouverts sur le projet Phabricator (ou créer une nouvelle tâche) et téléversez votre correction sur le projet Gerrit de cette extension. Vous pouvez aussi y voir :

Demandes de fonctionnalités

Utilisez simplement le même flux de travail que pour le rapport d'erreur.

Notes