Extension:SimpleSAMLphp

This page is a translated version of the page Extension:SimpleSAMLphp and the translation is 100% complete.
Other languages:
English • ‎Türkçe • ‎français • ‎polski • ‎中文 • ‎日本語
PluggableAuth Icon.svg This extension requires the PluggableAuth extension to be installed first.
Manuel des extensions MediaWiki
OOjs UI icon advanced.svg
SimpleSAMLphp
État de la version : stable
Implémentation Identité de l'utilisateur
Description Étend l'extension PluggableAuth pour fournir une authentification à l'aide de SimpleSAMLphp.
Auteur(s) Cindy Cicalese, Robert Vogel
Dernière version 4.5.2 (2020-04-12)
Politique de compatibilité Master maintains backwards compatibility.
MediaWiki 1.31+
PHP 5.3+
Licence Licence MIT
Téléchargement
  • $wgSimpleSAMLphp_GroupMap
  • $wgSimpleSAMLphp_UsernameAttribute
  • $wgSimpleSAMLphp_AttributeProcessorFactories
  • $wgSimpleSAMLphp_SyncAllGroups_LocallyManaged
  • $wgSimpleSAMLphp_SyncAllGroups_GroupAttributeName
  • $wgSimpleSAMLphp_EmailAttribute
  • $wgSimpleSAMLphp_GroupAttributeDelimiter
  • $wgSimpleSAMLphp_MandatoryUserInfoProviderFactories
  • $wgSimpleSAMLphp_SyncAllGroups_GroupNameModificationCallback
  • $wgPluggableAuth_Class
  • $wgSimpleSAMLphp_RealNameAttribute
Traduire l’extension SimpleSAMLphp sur translatewiki.net

Vérifier la matrice des utilisations et des versions.

Problèmes Tâches ouvertes · Signaler un bogue

L’extension SimpleSAMLphp utilise l’extension PluggableAuth extension pour fournir une authentification en utilisant SimpleSAMLphp. Il est principalement conçu pour prendre en charge les flux d'authentification initiés par SP.

Installation

Cette extension nécessite le PluggableAuth extension et SimpleSAMLphp qui doivent être installé préalablement.


  • Téléchargez et placez le(s) fichiers (s) dans un répertoire appelé SimpleSAMLphp dans votre dossier extensions/.
  • Ajoutez le code suivant à la fin de votre fichier LocalSettings.php :
    wfLoadExtension( 'SimpleSAMLphp' );
    
  • Installation et configuration SimpleSAMLphp
  • Configuration requise
  •   Fait – Accédez à Special:Version sur votre wiki pour vérifier que l'extension a bien été installée.

Configuration

Les valeurs doivent être renseignées obligatoirement pour les variables de configuration obligatoires :

Drapeau Valeur par défaut Description
$wgSimpleSAMLphp_InstallDir Pas de valeur par défaut La localisation sur le serveur local où SimpleSAMLphp est installé.
$wgSimpleSAMLphp_AuthSourceId Pas de valeur par défaut AuthSourceId utilisé pour l'authentification.
$wgSimpleSAMLphp_RealNameAttribute Pas de valeur par défaut Le nom du ou des attributs à utiliser pour le vrai nom de l'utilisateur. Il peut s'agir d'un seul nom d'attribut ou d'un tableau de noms d'attributs. Dans ce dernier cas, les valeurs d'attribut seront concaténées avec des espaces entre elles pour former la valeur du nom réel de l'utilisateur.
$wgSimpleSAMLphp_EmailAttribute Pas de valeur par défaut Le nom de l'attribut à utiliser pour l'adresse e-mail de l'utilisateur.
$wgSimpleSAMLphp_UsernameAttribute Pas de valeur par défaut Le nom de l'attribut à utiliser pour le nom d'utilisateur de l'utilisateur.

Variables de configuration optionnelles :

Drapeau Valeur par défaut Description Depuis
$wgSimpleSAMLphp_GroupMap null Mapping from SAML attributes to MediaWiki groups of the form:

$wgSimpleSAMLphp_GroupMap = [ 'mediawiki group' => ['saml attribute' => ['group 1', 'group 2', '...']]];

Aucun mappage de groupe n'est effectué si $wgSimpleSAMLphp_GroupMap est nul.

$wgSimpleSAMLphp_GroupAttributeDelimiter null Si l'IdP renvoie la liste des groupes dans une seule chaîne (par exemple "saml attribute" => [ "group 1,group 2,group 3" ] au lieu de "saml attribute" => [ "group 1", "group 2", "group 3" ]), cette valeur peut être définie pour fractionner la chaîne. Sachez que dans ce cas, seul le premier élément de la valeur d'attribut SAML est en cours d'évaluation. Ce paramètre s'applique aux deux mécanismes de synchronisation de groupe "MapGroups" et "SyncAllGroups" 4.3
$wgSimpleSAMLphp_SyncAllGroups_GroupAttributeName "groups" S'il est configuré pour utiliser "SyncAllGroups", cet attribut SAML sera lu 4.3
$wgSimpleSAMLphp_SyncAllGroups_LocallyManaged [ "sysop" ] S'ils sont configurés pour utiliser "SyncAllGroups", ces groupes d'utilisateurs locaux ne seront pas influencés par ce qui est défini dans la réponse SAML 4.3
$wgSimpleSAMLphp_SyncAllGroups

_GroupNameModificationCallback

null S'il est configuré pour utiliser "SyncAllGroups", cela peut être utilisé pour modifier/normaliser les groupes provenant de l'IdP. Exemple voir ci-dessous. 4.3
$wgSimpleSAMLphp_AttributeProcessorFactories [

"...\\MapGroups::factory"

]

Cela peut être utilisé pour configurer le mécanisme de synchronisation de groupe et pour ajouter le traitement des données de réponse SAML arbitraires. Exemple voir ci-dessous. Le rappel d'usine a la signature suivante:

callback(

\User $user,

array $attributes,

\Config $config,

SimpleSAML\Auth\Simple $saml )

: MediaWiki\Extension\SimpleSAMLphp\IAttributeProcessor

4.3

Définir le fournisseur d’informations utilisateur personnalisé

Si vous souhaitez modifier l'un des champs username, realname ou email avant la connexion, par exemple, si votre source SAML ne fournit pas d'attribut de nom d'utilisateur explicite et que vous souhaitez utiliser l'adresse e-mail sans le domaine pour le nom d'utilisateur, vous pouvez configurer un rappel personnalisé pour $wgSimpleSAMLphp_MandatoryUserInfoProviderFactories. La méthode de fabrique a la signature suivante:

factoryCallback( \Config $config ) : \MediaWiki\Extension\SimpleSAMLphp\IUserInfoProvider

Pour des cas d'utilisation simples, on peut utiliser MediaWiki\Extension\SimpleSAMLphp\UserInfoProvider\GenericCallback, en supposant que votre attribut email s'appelle mail (s'il s'appelle autre chose, changez les deux instances de $attributes['mail'] en $attributes['YourEmailAttributeName']):

 $wgSimpleSAMLphp_MandatoryUserInfoProviderFactories['username'] = function( $config ) {
     return new \MediaWiki\Extension\SimpleSAMLphp\UserInfoProvider\GenericCallback( function( $attributes ) {
         if ( !isset( $attributes['mail'] ) ) {
             throw new Exception( 'missing email address' );
         }
         $parts = explode( '@', $attributes['mail'][0] );
         return strtolower( $parts[0] );
     } );
 };

Mappage groupe

Use case: your SAML IdP reads groups from LDAP or Database and stores this information inside an attribute of the SAML response. You want to use this to map MediaWiki groups to users belonging to some known groups given by your IdP.

Exemple:

  • Votre IdP envoie un attribut nommé "groupes" avec une liste de noms tels que "administrateur", "étudiant", "enseignant", ... dans la réponse SAML après authentification.
  • Tous les utilisateurs qui ont la valeur "administrator" dans l'attribut "groups" doivent être mappés au groupe "sysop" de MediaWiki pour leur donner des droits d'administrateur au sein de votre instance de MediaWiki.
  • Créez une carte de groupe dans votre LocalSettings.php comme suit: $wgSimpleSAMLphp_GroupMap = ['sysop' => ['groups' => ['administrator']]];

Vous pouvez proposer des mappages assez complexes qui correspondent à vos besoins. Si vous avez plusieurs attributs de SAML, ajoutez-les simplement au tableau avec le tableau de valeurs que vous souhaitez mapper.

Si un groupe MediaWiki n'existe pas, il sera créé "à la volée" lors du premier mappage réussi d'un utilisateur.

Si un utilisateur appartient à un groupe MediaWiki qui n'est plus mappé à cet utilisateur (par exemple, en perdant l'appartenance au groupe dans la source de données utilisateur SAML), l'utilisateur sera supprimé de ce groupe MediaWiki lors de la prochaine connexion. De cette manière vous pouvez également supprimer en masse des groupes de SAML et de leurs appartenances - il suffit de brouiller les valeurs de mappage pour qu'elles ne correspondent pas à la réponse SAML, mais ne gâchez pas le nom du groupe MediaWiki.

Mappage groupe 2

Depuis la version 4.3, on peut également configurer un mécanisme de synchronisation de groupe alternatif. Outre les "MapGroups" par défaut, on peut utiliser "SyncAllGroups", qui prend tous les groupes de la réponse SAML et leur attribue l'utilisateur.

Pour ce faire, ajoutez ce qui suit au LocalSettings.php:

$wgSimpleSAMLphp_AttributeProcessorFactories = [
	"MediaWiki\\Extension\\SimpleSAMLphp\\AttributeProcessor\\SyncAllGroups::factory"
];

Si l'IdP renvoie des noms de groupe qui ne conviennent pas au wiki, on peut mettre en place un callback pour modifier les noms de groupe. Par exemple. certaines configurations IdP peuvent renvoyer des LDAP-DN comme "CN = Admin, OU = Groups, DC = SomeDomain". On pourrait alors préciser en LocalSettings.php:

$wgSyncAllGroups_GroupNameModificationCallback = function ( $origGroupName ){
    return preg_replace( '#^CN=(.*?),OU=.*$#', '$1', $origGroupName );
}

Traitement des données arbitraires de la réponse SAML

Les "processeurs d'attributs" peuvent également être utilisés pour traiter des données arbitraires de la réponse SAML. Dans ce cas, il faut d"abord créer une nouvelle classe PHP qui implémente l'interface MediaWiki\Extension\SimpleSAMLphp\IAttributeProcessor Pour plus de commodité, la classe de base MediaWiki\Extension\SimpleSAMLphp\AttributeProcessor\Base peut être utilisée, qui a un rappel de personnalisation approprié et un constructeur implémenté. Un exemple

use MediaWiki\Extension\SimpleSAMLphp\AttributeProcessor\Base;

class SyncLanguage extends Base {
    public function run() {
        //Set gender on $this->user from a value in $this->attributes
    }
}

It then needs to be instantiated by using the $wgSimpleSAMLphp_AttributeProcessorFactories.

Notes des versions

Version 4.5.2
  • bug corrigé: les groupes ne sont pas supprimés dans MW si l'attribut n'existe pas (T246351)
Version 4.5.1
  • correction d'avertissement: $wgSimpleSAMLphp_GroupMap n'est pas un tableau
  • amélioration du chargement des informations utilisateur et des groupes
  • tests améliorés
Version 4.5
  • Ajout de la prise en charge des fournisseurs d'informations utilisateur personnalisés
  • mis à jour vers la version 2 du manifeste
Version 4.4
Version 4.3
  • Ajout de la prise en charge des processeurs d'attributs
  • Correction d'un bug dans le traitement des attributs SAML
  • Ajout d'un espace de noms compatible PSR-4
  • Suppression du support pour MW <1,31
Version 4.2
  • Les fonctions de nom d'utilisateur, de vrai nom et de courrier électronique ont été supprimées afin qu'elles puissent être remplacées dans une sous-classe pour permettre des règles personnalisées
  • Style de codage et répertoires
  • Débogage amélioré
Version 4.1
  • Implémente l'accroche PluggableAuthPopulateGroups pour remplir les groupes MediaWiki à partir des attributs SAML. Merci à Poikilotherm d'avoir contribué à cette fonctionnalité.
Version 4.0
  • Ajout d'un message d'erreur facultatif à authenticate()
  • Numéro de version bossé à synchroniser avec les extensions PluggableAuth et OpenID Connect

Débogage

L'authentification unique peut être difficile à configurer correctement, en particulier pour les nouveaux administrateurs système chargés de connecter leur nouvelle instance MediaWiki au fournisseur d'identité de la société. The PluggableAuth and SimpleSAMLphp extensions themselves are quite stable, so most issues are usually associated with configuration.

Pour commencer à déboguer, affectez $wgDebugLogFile à un chemin de fichier sur votre système local. Vous n'avez pas besoin de définir $wgShowExceptionDetails à true ; en fait, vous ne devriez probablement pas le faire, pour des raisons de sécurité.

Visitez votre wiki et essayez de vous connecter avec PluggableAuth. Une fois que vous avez rencontré votre erreur, consultez le fichier de débogage et cherchez des lignes qui commencent par [PluggableAuth] et [SimpleSAMLphp].

En cas de problème d'authentification, le journal de débogage indique quelque part [PluggableAuth] Authentication failed.

L'extension SimpleSAMLphp fonctionne ainsi :

  1. L'utilisateur clique sur le bouton de connexion SSO sur wiki.
  2. L'utilisateur est dirigé vers Special : PluggableAuthLogin. Il détecte que le wiki utilise Extension : SimpleSAMLphp. SimpleSAMLphp (le logiciel, pas l'extension) détecte qu'aucune session de connexion n'a encore été définie.
  3. Special:PluggableAuthLogin appelle la fonction authenticate() de SimpleSAMLphp, qui appelle l'API de SimpleSAMLphp pour commencer le processus d'authentification.
  4. SimpleSAMLphp redirige l'utilisateur vers la page de connexion du fournisseur d'identité.
  5. Une fois que l'utilisateur s'est authentifié avec IDP, il génère une assertion et redirige vers l'URL ACS (service client d'assertion) de votre instance SimpleSAMLphp locale, qui redirige ensuite vers le Special:PluggableAuthLogin du wiki.
  6. Special:PluggableAuthLogin reconnaît maintenant le cookie de session et gère la connexion de l'utilisateur.

Si vous rencontrez une boucle de redirection de connexion, le processus d'authentification n'aura jamais la chance de consigner un message d'erreur ou de réussite. Cela indique que l'appel à la méthode requireAuth() de SimpleSAMLphp ne se termine jamais, ce qui signifie que SimpleSAMLphp essaie de recommencer le processus d'authentification. Ceci est généralement dû au fait qu'il ne détecte pas la session de connexion malgré sa définition. Assurez-vous que vous ne faites pas d'erreurs courantes, telles que ne pas définir votre magasin SimpleSAMLphp sur une méthode basée sur la base de données, ou mettre votre instance SimpleSAMLphp sur un domaine différent de votre wiki sans proxy approprié. (Par exemple, si votre instance de SimpleSAMLphp se trouve dans le domaine canonique saml.mywiki-sso.com mais que votre wiki est situé à my.wiki, la session ne sera jamais stockée sur my.wiki et Special:PluggableAuthLogin redirigera vers le fournisseur d'identité au lieu de connecter l'utilisateur, créant ainsi une boucle de connexion.)

Si vous rencontrez un message d'erreur sur Special:PluggableAuthLogin après une redirection réussie du fournisseur d'identité, il y a probablement une erreur de configuration PluggableAuth/SimpleSAMLphp dans votre LocalSettings.php. Vérifiez si vous avez correctement configuré vos attributs. The attributes may sometimes need to be URLs (such as if you are using Azure Active Directory).

Bogues connus

Si vous utilisez MediaWiki 1.27 ou version ultérieure avec PluggableAuth 2.0 ou version ultérieure, des problèmes ont été observés lorsque SimpleSAMLphp est configuré pour utiliser phpsession pour store.type. Cela peut être dû phab:T147161. Pour résoudre ce problème, utilisez un type de magasin différent dans la configuration du [logiciel https://simplesamlphp.org/ SimpleSAMLphp] en ajustant simplesamlphp/config/config.php (voir https://simplesamlphp.org/docs/stable/simplesamlphp-maintenance#section_2_3). Par exemple, pour SQLite, utilisez:

'store.type' => 'sql',
'store.sql.dsn' => 'sqlite:/path/where/the/apache/user/can/write/sqlitedatabase.sq3',

Pour MySQL, utilisez:

'store.type' => 'sql',
'store.sql.dsn' => 'mysql:host=xxx;port=xxx;dbname=xxx',
'store.sql.username' => 'xxx',
'store.sql.password' => 'xxx',

Voir aussi