Extension:PluggableAuth

This page is a translated version of the page Extension:PluggableAuth and the translation is 99% complete.
Outdated translations are marked like this.
Cette extension est maintenue par un membre de Groupe des acteurs de MediaWiki .
Manuel des extensions MediaWiki
PluggableAuth
État de la version : stable
px
Implémentation Identité de l'utilisateur , Droits utilisateur , Accroche
Description Fournit un environnement pour les extensions d'authentification et d'autorisation.
Auteur(s) Cindy Cicalese (cindy.cicalesediscussion)
Dernière version 7.0.0 (2023-06-12)
Politique de compatibilité Versions ponctuelles alignées avec MediaWiki. Le master n'est pas compatible arrière.
MediaWiki >= 1.35.0
Composer mediawiki/pluggable-auth
Licence Licence MIT
Téléchargement
  • $wgPluggableAuth_EnableFastLogout
  • $wgPluggableAuth_EnableLocalLogin
  • $wgPluggableAuth_EnableLocalProperties
  • $wgPluggableAuth_EnableAutoLogin
  • $wgPluggableAuth_Config
Téléchargements trimestriels 1,632 (Ranked 1st)
Traduire l’extension PluggableAuth sur translatewiki.net si elle y est disponible
Problèmes Tâches ouvertes · Signaler un bogue

L'extension PluggableAuth fournit un environnement pour la création d'extensions d'authentification et d'autorisation.

Authentification : c'est le processus qui consiste à prouver qu'un utilisateur est bien celui qu'il prétend être. Cela peut être fait, par exemple, en fournissant un nom d'utilisateur et un mot de passe ou un jeton ou un élément biométrique.

Les extensions d'autorisation suivantes peuvent être utilisées avec PluggableAuth :

The following authentication extensions also exist, but can only be used with older versions of PluggableAuth:

Autorisation : c'est le processus permettant de déterminer si un utilisateur authentifié particulier doit avoir accès à une ressource particulière. Cela peut être fait, par exemple, en vérifiant une liste d'adresses courriel autorisées ou en vérifiant les valeurs des attributs utilisateur fournis par un serveur d'identité.

Dans le cas de PluggableAuth, les extensions d'autorisation déterminent si un utilisateur authentifié peut continuer à se connecter à un wiki. Cependant, les extensions « d'authentification » (plutôt que les extensions d'autorisation) prennent en charge les groupes d'utilisateurs pour lesquels un utilisateur doit être autorisé, en fonction des attributs transmis par le fournisseur d'identité (IdP).

Les extensions d'autorisation suivantes peuvent être utilisées avec PluggableAuth :

PluggableAuth peut utilisé avec un ou plusieurs greffons d'authentification, et zéro ou plusieurs greffons d'autorisation Si plusieurs greffons d'authentification sont utilisés, un bouton est ajouté respectivement par greffon sur la page Special:UserLogin. Si un seul greffon d'authentification est utilisé et que la connexion locale n'est pas permise, la page Special:UserLogin sera sautée. Si aucun greffon d'autorisation n'est utilisé, tous les utilisateurs authentifiés sont autorisé à utiliser le wiki.

PluggableAuth definit deux accroches importantes :

Prior to version 7.0.0, it also defined a hook that was used for group population, but that was removed in version 7.0.0 and replaced with a function:


Installation

  • Téléchargez et placez le(s) fichier(s) dans un répertoire appelé PluggableAuth dans votre dossier extensions/.
  • Ajoutez le code suivant à la fin de votre fichier LocalSettings.php  :
    wfLoadExtension( 'PluggableAuth' );
    
  • Les droits d'utilisateur createaccount ou autocreateaccount doivent être accordés à tous les utilisateurs. Voir les Droits d'utilisateur.
  • Configuration requise
  •   Fait – Accédez à Special:Version sur votre wiki pour vérifier que l'extension a bien été installée.
Un ou plusieurs greffons d'authentification, et zéro ou plus de greffons d'autorisation doivent également avoir été installés.
Les versions 6.0 et 7.0.0 de PluggableAuth sont des mises à jour importantes. Le paramètre de configuration $wgPluggableAuth_Config est nécessaire dans la version 6.0 et les suivantes. Les greffons doivent être compatibles avec la version installée de PluggableAuth.
Matrice de compatibilité
Extensions PluggableAuth version 7.0.0 or later PluggableAuth version 6.x PluggableAuth version 5.7 ou plus ancien
Cas 1.0 - -
DiscourseSsoConsumer - 4.0.0 3.0.0
JWTAuth 2.0.0 - -
LDAPAuthentication2 2.0.0 - 1.0.1
NaylorAMS - - 0.1.0
OpenID Connect 7.0.0 6.0.0 5.4.0
PHPBB Auth 4.1.0 4.1.0 4.0.0
Shibboleth - - v1.0.0-rc.1
SimpleSAMLphp 7.0.0 5.0.0 4.5.2
WSOAuth 9.0.0 6.0.0 5.0.0
EmailAuthorization 3.0.0 3.0.0 2.0.0
LDAPAuthorization 2.0.0 - 1.0.0


Configuration

Toutes versions

Paramètre Valeur par défaut Description
$wgPluggableAuth_EnableAutoLogin false La connexion doit-elle se produire automatiquement lorsqu'un utilisateur se connecte au wiki ?
$wgPluggableAuth_EnableLocalLogin false L'utilisateur doit-il également être présenté avec des champs de nom d'utilisateur et de mot de passe sur la page de connexion, pour permettre une connexion locale basée sur un mot de passe au wiki ?
$wgPluggableAuth_EnableLocalProperties false Si true, les utilisateurs peuvent modifier leur adresse courriel et leur vrai nom sur le wiki. Si false (valeur par défaut), ils ne peuvent pas le faire. Notez que, si vous voulez de quelque manière que ce soit, que l'adresse courriel et / ou le nom réel renvoyé par le fournisseur d'authentification soit utilisé, vous devez laisser ce paramètre à sa valeur par défaut.

Après l'appel à authenticate(), PluggableAuth vérifie si le vrai nom ou l'adresse courriel renvoyés sont différents de ceux enregistrés dans la base de données du wiki. Si l'un ou l'autre sont différent, on vérifie si ce paramètre vaut true. Si tel est le cas, cela est compris par PluggableAuth pour indiquer que le vrai nom et l'adresse courriel sont gérés dans le wiki sur la page Special:Preferences. Sinon, le vrai nom et l'adresse courriel sont gérés par le fournisseur d'authentification, de sorte que les nouvelles valeurs du nom réel et de l'adresse courriel soient enregistrées dans la base de données du wiki. Autrement dit, si ce paramètre vaut false, toute modification du nom réel ou de l'adresse courriel du fournisseur d'authentification distant écrasera les valeurs locales lorsque l'utilisateur se connectera.

Version 7.0.0 or later

Flag Default Description
$wgPluggableAuth_EnableFastLogout Allow logout without an extra button click to confirm if bypassing the XHR POST logout. Since MediaWiki 1.35 by default (Skin "Vector") the logout is no longer performed by navigating to "Special:UserLogout", but is instead done by an XHR POST request. This is incompatible with the logout process of many external identity providers if performing single logout, so a mechanism was added to allow the old approach, but by default that requires an additional button click to confirm logout. Setting this flag to true will avoid that additional button click.

Version 6.0 et ultérieures

Paramètre Valeur par défaut Description
$wgPluggableAuth_Config aucune Tableau de tableaux contenant les paramètres de greffons d'authentification. Les clés du tableau externe sont utilisées pour le texte des boutons sur Special:UserLogin si aucun texte de bouton n'est fourni dans le tableau interne correspondant. Les clés valides des tableaux internes sont :
  • plugin (nécessaire) — nom du greffon d'authentification
  • buttonLabelMessage (facultatif) — clé du message système (par exemple SSOButtonLabel) pour ajouter le texte dans MediaWiki:SSOButtonLabel à utiliser pour le bouton sur Special:UserLogin Notez que le message ajouté doit être dans la langue de l'instance car il ne peut pas être traduit sur le wiki.
  • data — tableau de configuration passé au greffon d'authentification. Le contenu dépend du greffon d'authentification. facultatif ou obligatoire, cela dépend du greffon d'authentification.
  • groupsyncs — (version 7.0.0 and later) Configuration array for group syncronization. See details at Group Synchronization below.

Version 5.7 et antérieures

Paramètre Valeur par défaut Description
$wgPluggableAuth_ButtonLabelMessage aucune S'il est défini, c'est le nom d'un message qui sera utilisé pour l'étiquette du bouton de connexion sur le formulaire Special:UserLogin. Ceci est utile si un greffon d'authentification affichera le formulaire Special:UserLogin à l'utilisateur et doit personnaliser le texte du bouton avec un message localisable. Si non défini et si aucune valeur n'est atttribuée à $wgPluggableAuth_ButtonLabelMessage, la valeur du message pluggableauth-loginbutton-label sera utilisée (par défaut "Log In With PluggableAuth"). Pour remplacer cette valeur, vous pouvez modifier la page MediaWiki:Pluggableauth-loginbutton-label et ses variantes de langue. Cette variable de configuration est généralement définie, le cas échéant, par les greffons d'authentification et non par les administrateurs de site wiki. Si elle est définie par un administrateur de site wiki, les pages de message concernées dans l'espace de noms MediaWiki devront être créées avec les valeurs traduites des messages.
$wgPluggableAuth_ButtonLabel null Si $wgPluggableAuth_ButtonLabelMessage n'est pas défini et que $wgPluggableAuth_ButtonLabel est initialisé avec une valeur de chaîne, cette dernière sera utilisée comme étiquette du bouton de connexion sur le formulaire Special : UserLogin. Cela permet à un administrateur de site wiki de définir l'étiquette si un Message localisable n'est pas fourni par un plugin d'authentification. Notez que cette chaîne N'est PAS localisable.
$wgPluggableAuth_ExtraLoginFields [] Tableau de champs supplémentaires à ajouter au formulaire de connexion à Special:UserLogin. Voir la documentation de AuthenticationRequest:getFieldInfo() pour le format du tableau. Cette variable de configuration peut être définie par les greffons d'authentification et ne doit pas être définie par les administrateurs de site wiki.
$wgPluggableAuth_Class aucune Nom d'une classe qui étend la classe abstraite PluggableAuth pour fournir l'authentification. Cette variable de configuration doit être définie par les greffons d'authentification et ne doit pas être définie par les administrateurs de site wiki.

Group Synchronization

In version 7.0.0 and later when you are using an authentication plugin that supports retrieval of attributes from the identity provider (currently OpenID Connect, SimpleSAMLphp, WSOAuth, and JWTAuth), it is possible to synchronize groups from the identity provider to MediaWiki groups. There are two built-in group synchronization algorithms, syncall and mapped, described below. It is also possible for an extension to provide additional custom group synchronization algorithms.

To configure group synchronization, add a groupsyncs array to the $wgPluggableAuth_Config array. That array must contain one or more arrays that specify a group sync to be applied to the attributes retrieved from the identity provider. All group syncs must define a type element, which will have the value syncall, mapped, or the name of a custom group sync. Group syncs may also specify a groupAttributeDelimiter that can be used to explode multi-valued attributes.

syncall

The syncall group sync will synchronize all groups in the relevant attributes sent from the identity provider to MediaWiki groups. It supports the following additional configuration elements:

  • groupAttributeName (default: "groups"): The name of the attribute that contains the groups identified for the user by the identity provider. This can be a single string value or can be an array. If it is an array, it must contain an element, path, that is an array of strings that form a path through the attributes to the group values. It may also contain an element, prefix, that is a string to prepend to the name of each group found in that path.
  • locallyManaged (default: [ "sysop" ]): An array of strings that are the names of groups that will be managed by MediaWiki rather than the identity provider, so they should not be removed if they are not in the array of groups sent by the identity provider.
  • filterPrefix (default: ‘’): A prefix to prepend to all groups found by this group sync. If provided, only groups already assigned to the user in MediaWiki that begin with this prefix will be removed and replaced with the groups sent by the identity provider; if it is not provided, all groups except those in the locallyManaged array will be removed and replaced by those sent by the identity provider.
  • onlySyncExisting (default: false): Only add groups that are already known to MediaWiki.
  • groupNameModificationCallback (optional): A callback that will be applied to each group name.

Example:

$wgPluggableAuth_Config = [
  "My Login" => [
    'plugin' => '...',
    'data' => [
      ...
    ],
    'groupsyncs' => [
      [
        'type' => 'syncall',
        'locallyManaged' => [ 'sysop', 'bureaucrat' ],
        'filterPrefix' => 'oidc_',
        'groupAttributeName' => [
          [
            'path' => ['realm_access', 'roles'],
            'prefix' => 'global_',
          ],
          [
            'path' => ['resource_access', 'account', 'roles'],
          ]
        ],
        'groupNameModificationCallback' => static function ( $origGroupName ) {
          return str_replace( 'globex', 'acme', $origGroupName );
        }
      ]
    ]
  ]
];

mapped

The mapped groupsync is used when only a subset of groups sent from the identity provider should be synchronized with the wiki. Only groups that are mentioned in the mapping are affected by the mapping. It supports the following additional configuration elements:

  • map: An array containing the mapping to MediaWiki groups from identity provider attributes. Each top level array index is the name of a MediaWiki group. The array elements corresponding to those indices contain an array of elements each with an attribute name as the array index and a string value or an array of string values as the value, indicating the attribute values that will map to that group.
  • addOnlyGroups (default: []): An array of MediaWiki groups that should only be added to the user if they appear in the attributes sent from the identity provider, not removed if they do not appear.

Example:

$wgPluggableAuth_Config = [
  "My Login" => [
    'plugin' => '...',
    'data' => [
      ...
    ],
    'groupsyncs' => [
      [
        'type' => 'mapped',
        'map' => [
          'industry' => [ 'groups' => 'Professional Member' ],
          'student' => [ 'groups' => 'Student Member' ],
          'member' => [ 'groups' => [ 'Professional Member', 'Student Member'  ] ],
          'staff' => [ 'groups' => 'Staff' ]
        ]
      ]
    ]
  ]
];

Notes de développement

Créer des nouveaux greffons d'authentification

Version 6.0 et ultérieures :

  • Sous-classe des greffons d'authentification, c'est la classe abstraite MediaWiki\Extension\PluggableAuth\PluggableAuth fournie par PluggableAuth.
  • Dans la version 6.0 et les suivantes, greffon d'authentification à spécifier dans la section attributes de extension.json. Par exemple :
"attributes": {
   "PluggableAuth": {
      "OpenIDConnect": {
         "class": "MediaWiki\\Extension\\OpenIDConnect\\OpenIDConnect",
         "services": [
            "MainConfig",
            "AuthManager",
            "OpenIDConnectStore"
         ]
      }
   }
},

Version 5.7 et antérieures :

  • Sous-classe des greffons d'authentification, classe abstraite PluggableAuth fournie par PluggableAuth.
  • Chaque greffon d'authentification doit initialiser $PluggableAuth_Class avec le nom de cette sous-classe.

La sous-classe du greffon d'authentification doit implémenter les méthodes suivantes :

public function authenticate( ?int &$id, ?string &$username, ?string &$realname, ?string &$email, ?string &$errorMessage ): bool;

  • Appelé pour authentifier l'utilisateur.
  • Les paramètres sont utilisés pour renvoyer l'identifiant utilisateur, le nom d'utilisateur, le vrai nom et l'adresse courriel de l'utilisateur authentifié et, si l'utilisateur ne peut pas être authentifié, un message d'erreur facultatif. $id est un entier et les autres paramètres sont tous des chaînes. Si l'utilisateur ne peut pas être authentifié et qu'aucune valeur n'est définie pour $errorMessage, un message d'erreur par défaut s'affiche.
  • $id doit être défini sur null si l'utilisateur est nouveau, auquel cas PluggableAuth l'ajoutera dans la base de données.
  • Doit renvoyer true si l'utilisateur a été authentifié et false dans le cas contraire.
  • Si le retour à l'URL, le nom de la page ou les paramètres de requête de la page à partir de laquelle la connexion a été initiée sont nécessaires dans la fonction authenticate(), ils peuvent être consultés comme suit :
$returnToUrl = $this->authManager->getAuthenticationSessionData(
    PluggableAuthLogin::RETURNTOURL_SESSION_KEY
);
$returnToPage = $this->authManager->getAuthenticationSessionData(
    PluggableAuthLogin::RETURNTOPAGE_SESSION_KEY
);
$returnToQuery = $this->authManager->getAuthenticationSessionData(
    PluggableAuthLogin::RETURNTOQUERY_SESSION_KEY
);

public function saveExtraAttributes( int $id ): void

  • Appelé après qu'un nouvel utilisateur a été authentifié et ajouté à la base de données pour ajouter des informations supplémentaires à la base de données requises par le mécanisme d'authentification.

public function deauthenticate( UserIdentity &$user ): void

  • Appelé lorsque l'utilisateur se déconnecte pour informer le fournisseur d'identité, si nécessaire, que le nettoyage, tel que la suppression de la session de l'utilisateur, doit être effectué.

Special:UserLogin avec des champs supplémentaires de connexion

La page Special:UserLogin sera affichée à l'utilisateur pendant l'authentification si une interaction avec celui-ci est nécessaire.

Autrement dit, si un seul fournisseur d'authentification est configuré, son greffon d'authentification n'ajoute pas de champ supplémentaire au formulaire Special:UserLogin en utilisant la fonction statique PluggableAuth::getExtraLoginFields() (ou $wgPluggableAuth_ExtraLoginFields dans les versions 5.7 et antérieures), et si la connexion locale (qui autorise les champs du nom d'utilisateur et du mot de passe du formulaire Special:UserLogin) n'est pas activée par un administrateur de site en utilisant $wgPluggablAuth_EnableLocalLogin, la page Special:UserLogin ne sera pas affichée.

Même si Special:UserLogin n'est pas affiché, il peut être nécessaire pour un greffon d'authentification de recueillir l'entrée utilisateur à l'aide d'une page web fournie par un système d'authentification d'entreprise. Ceci serait réalisé par une redirection, souvent à partir de la bibliothèque d'authentification utilisée par le greffon d'authentification.

Si aucune bibliothèque de ce type n'existe et que vous devez mettre en œuvre le mécanisme d'authentification à partir de zéro, la redirection ne doit pas aller à Special:UserLogin. Au lieu de cela, il devrait aller à une page spéciale personnalisée non répertoriée et basée sur PluggableAuthLogin.php. Enfin, s'il n'y a pas d'entrée utilisateur requise par l'utilisateur dans le cadre de l'authentification à partir de Special:UserLogin ou du système d'authentification à distance, cliquer sur le lien "Se connecter" présentera simplement la page actuelle dans un état connecté.

Si un greffon d'authentification ajoute des champs supplémentaires au formulaire Special:UserLogin en utilisant la fonction statique PluggableAuth::getExtraLoginFields() (ou $wgPluggableAuth_ExtraLoginFields dans les versions 5.7 et antérieures), les champs sont accessibles dans la fonction authenticate() dans un greffon d'authentification comme suit :

...
$authManager = MediaWikiServices::getInstance()->getAuthManager();
$extraLoginFields = $authManager->getAuthenticationSessionData(
    PluggableAuthLogin::EXTRALOGINFIELDS_SESSION_KEY
);

Cela renverra un tableau de valeurs de champ indexées par le nom du champ du tableau descripteur de champ.

Créer des nouveaux greffons d'authentification

Les accroches d'autorisation utilisent l'accroche PluggableAuthUserAuthorization pour enregistrer une implémentation de la fonction suivante :

function authorize( UserIdentity $user, bool &$authorized ): void

  • $user est l'objet UserIdentity pour l'utilisateur qui demande l'autorisation
  • $authorized doit avoir la valeur true si l'utilisateur est autorisé et false dans le cas contraire.

Notes de version

Version 7.0.0
  • Add group population framework (migrated from SimpleSAMLphp functionality)
  • Made config case insensitive
  • Converted group population from a hook to a function
  • Code improvements
  • Bug fixes:
    • T333415: LDAP login does not work when local login is enabled
    • T334083: Problem with auto-creation of LDAP user in the wiki in case of the first login
    • T334950: Username missing in "onPluggableAuthUserAuthorization" hook
    • T305031: Error when logging out via API
    • T322828: Don't store return to URL as an auth/session secret
Version 6.3
  • Correction de la non compatibilité de MW 1.35 pour la désautentification
Version 6.2
  • ajout de la compatibilité avec MW 1.39
    • passage de l'accroche obsolète PersonalUrls à SkinTemplateNavigation::Universal
  • Ne met à jour que le nom réel s'il n'est pas null
  • utilise les setter et les getter pour récupérer le nom réel
Version 6.1
  • rétablissement de la compatibilité arrière avec la MW 1.35 (T308865)
Version 6.0
  • Prend en charge plusieurs greffons d'authentification utilisant $wgPluggableAuth_Config
  • Nécessite MediaWiki 1.35+
  • Arrêt du support pour les paramètres de configuration suivants :
    • $wgPluggableAuth_ButtonLabelMessage (utiliser le champ buttonLabelMessage de l'entrée $wgPluggableAuth_Config correspondante)
    • $wgPluggableAuth_ButtonLabel (utiliser l'index de l'entrée $wgPluggableAuth_Config correspondante)
    • $wgPluggableAuth_ExtraLoginFields (utiliser une fonction statique de la classe PluggableAuth)
    • $wgPluggableAuth_Class (dorénavant spécifié par un attribut de extension.json du greffon d'authentification et référençant le champ plugin dans l'entrée correspondante de $wgPluggableAuth_Config).
Version 5.7
  • Ajout d'un message d'erreur lorsqu'il y a une erreur fatale de session (rare)
Version 5.6
  • Correction de l'ouverture de session automatique pour qu'elle retourne à la page correcte après l'authentification.
Version 5.5
  • Correction d'un problème avec l'accroche PluggableAuthPopulateGroups.
Version 5.4
  • Ajout de $wgPluggableAuth_ButtonLabelMessage et $wgPluggableAuth_ButtonLabel.
  • Corrections du style de codage.
Version 5.3
  • Ajout de $wgPluggableAuth_ExtraLoginFields.
Version 5.2
  • Connexion automatique convertie en PHP à partir de JavaScript.
Version 5.1
  • Ajout de l'accroche PluggableAuthPopulateGroups. Merci à Poikilotherm d'avoir contribué à cette fonctionnalité.
Version 5.0
  • Ajout de $wgPluggableAuth_EnableLocalProperties et suppression de l'utilisation de editmyprivateinfo
  • Instruction de debogage ajoutée quand returntourl n'est pas défini
Version 4.2
  • Exception corrigée lorsque returntoquery n'est pas défini.
Version 4.1
  • Ajout de variables de session pour contenir le nom de la page et les paramètres de requête de la page à partir de laquelle la connexion a été initiée pour être utilisée dans authenticate()
Version 4.0
  • Ajout d'un message d'erreur facultatif à authenticate()
  • Numéro de version incrémenté à synchroniser avec les extensions SimpleSAMLphp et OpenIDConnect
Version 2.2
  • Confirmer les adresses de messagerie provenant de sources d'authentification externes
Version 2.1
  • Mettre à jour les conventions de dénomination des fichiers
Version 2.0
  • Presque entièrement réécrit pour prendre en charge le nouveau cadre d'authentification et de gestion des sessions de MediaWiki 1.27
  • Basculé sur le nouveau mode d'enregistrement des extensions
  • Noms des paramètres de configuration modifiés pour ajouter le préfixe $wg
  • $PluggableAuth_Timeout supprimé
  • $PluggableAuth_AutoLogin renommé en $wgPluggableAuth_EnableAutoLogin
  • $wgPluggableAuth_EnableLocalLogin ajouté pour prendre en charge la connexion locale au wiki par mot de passe en plus de PluggableAuth
Version 1.2
  • Déplacement de l'ajout d'un nouvel utilisateur dans la base de données wiki, après l'autorisation réussie de l'utilisateur
  • Validation editmyprivateinfo ajouté
Version 1.1
  • Ajout d'un appel à la déconnexion lorsque la session expire pour s'assurer que la fonction deauthenticate dans les classes d'implémentation est appelée
Version 1.0
  • Version initiale