Extension:OAuth

From mediawiki.org
This page is a translated version of the page Extension:OAuth and the translation is 100% complete.
A ne pas confondre avec Extension:OATHAuth ou Extension:WSOAuth.
Manuel des extensions MediaWiki
OOjs UI icon advanced-invert.svg
OAuth
État de la version : stable
Implémentation Identité de l'utilisateur , Droits utilisateur , API
Description Permet aux utilisateurs d'autoriser en sécurité une autre application (cliente) d'utiliser l'API action de MediaWiki pour son compte.
Dernière version 1.1.0 (continuous updates)
Politique de compatibilité Versions ponctuelles alignées avec MediaWiki. Le master n'est pas compatible arrière.
MediaWiki >= 1.38.0
Modifie la base
de données
Oui
Composer mediawiki/oauth
Tables oauth_accepted_consumer
oauth_registered_consumer
Licence Licence publique générale GNU v2.0 ou supérieur
Téléchargement
Aide Help:OAuth
  • $wgOAuth2PublicKey
  • $wgOAuth2RequireCodeChallengeForPublicClients
  • $wgMWOAuthCentralWiki
  • $wgMWOAuthSecureTokenTransfer
  • $wgMWOAuthSharedUserSource
  • $wgOAuth2GrantExpirationInterval
  • $wgMWOauthDisabledApiModules
  • $wgOAuth2EnabledGrantTypes
  • $wgMWOAuthNonceCacheType
  • $wgOAuthGroupsToNotify
  • $wgMWOAuthRequestExpirationAge
  • $wgOAuth2RefreshTokenTTL
  • $wgMWOAuthSessionCacheType
  • $wgMWOAuthReadOnly
  • $wgOAuth2PrivateKey
  • $wgMWOAuthSharedUserIDs
  • $wgOAuthSecretKey
Traduire l’extension OAuth sur translatewiki.net si elle y est disponible
Rôle Vagrant oauth
Problèmes Tâches ouvertes · Signaler un bogue


L'extension OAuth implémente un serveur OAuth dans MediaWiki qui prend en charge à la fois les versions de protocole OAuth 1.0a et OAuth 2.0. Il permet à des développeurs tiers de créer de manière sécurisée, des applications (les consommateurs), auxquelles les utilisateurs peuvent attribuer un nombre limité de droits (les grants), pour qu'elles puissent utiliser l'API action de MediaWiki au nom de ces utilisateurs.


Pour développer une application qui utilise OAuth dans un wiki, voir OAuth pour les développeurs. Si vous vous servez d'un outil qui utilise OAuth sur un wiki où cette extension est installée, voyez OAuth .

Prérequis

  • OAuth utilise le cache des objets pour les sessions et les jetons temporaires. Ceci fonctionne tant que les paramètres de configuration du cache restent cohérents. (Older versions required Memcached explicitly.)
  • Actuellement, seules les bases de données MySQL et SQLite sont prises en charge
  • Si l'installation de MediaWiki est privée (c'est à dire que les utilisateurs doivent se connecter pour avoir un accès en lecture), il faudra ajouter Special:OAuth à la liste blanche.

Installation

Pour les utilisateurs de MediaWiki 1.24 ou précédents :

Les instructions ci-dessus décrivent la nouvelle procédure pour installer cette extension en utilisant wfLoadExtension(). Si vous avez besoin d'installer cette extension sur les précédentes versions de MediaWiki (1.24 ou antérieur), à la place de wfLoadExtension( 'OAuth' );, vous devez utiliser :

require_once "$IP/extensions/OAuth/OAuth.php";


Installation Vagrant :

  • Si vous utilisez Vagrant , installez avec vagrant roles enable oauth --provision

Droits utilisateur

Droit Description
mwoauthproposeconsumer Proposer de nouveaux consommateurs OAuth
mwoauthupdateownconsumer Mettre à jour les consommateurs OAuth que vous contrôlez
mwoauthmanageconsumer Gérer les consommateurs OAuth
mwoauthsuppress Supprimer des consommateurs OAuth
mwoauthviewsuppressed Afficher les consommateurs OAuth supprimés
mwoauthviewprivate Afficher les données privées OAuth
mwoauthmanagemygrants Gérer les autorisations OAuth

Pour attribuer les droits à un groupe donné, par exemple aux administrateurs système (sysops), ajoutez la ligne suivante à LocalSettings.php :

$wgGroupPermissions['sysop']['mwoauthproposeconsumer'] = true;

Configuration

Nom de variable Valeur par défaut Description
$wgMWOAuthCentralWiki false ID du wiki qui gère l'OAuth. Dans les fermes de wikis, il est logique de mettre ici le wiki qui sert de portail et qui est dédié à la gestion, ou qui ne gère que les connexions et l'authentification. Il peut néanmoins être initialisé à n'importe quel wiki de la ferme de wikis. Pour les sites qui n'ont qu'un seul wiki, ou les fermes pour lesquelles chaque wiki gère séparément ses clients, il faut laisser false.
$wgMWOAuthSharedUserIDs false (obsolète) Utiliser $wgMWOAuthSharedUserSource à la place

Indique si les IDs des utilisateurs globaux sont stockés dans les tables de OAuth. Sur les fermes de wikis qui possèdent un système central d'authentification (avec des IDs entiers d'utilisateur) et qui se partagent un wiki unique pour la gestion OAuth, ceci doit être mis à true. S'il y a des wikis qui possèdent un système d'authentification central mais qui ont leur propre gestion OAuth, alors ceci peut être mis à true ou à false. Sinon il doit toujours être mis à false. En mettant la valeur true il vous faut CentralIdLookup ou d'une extension pour l'authentification qui utilise MWOAuth. Après cela, cette valeur ne doit pas être modifiée pour éviter d'avoir des IDs ambigus. La migration cohérente des IDs utilisateurs doit avoir été faite avant ce type de modifications.

$wgMWOAuthSharedUserSource null Fournisseur de l'ID central lorsque les données confidentielles OAuth sont partagées sur une ferme de wikis

Source des IDs pour les utilisateurs partagés, si disponible. Si CentralIdLookup est disponible, il s'agit du $providerId pour CentralIdLookup::factory(). En général, null est souhaité pour le fournisseur par défaut. Si cette classe n'est pas disponible, ou si le fournisseur nommé n'est pas trouvé, ceci est passé aux accroches OAuthGetUserNamesFromCentralIds, OAuthGetLocalUserFromCentralId, OAuthGetCentralIdFromLocalUser, OAuthGetCentralIdFromUserName. Ceci n'a pas d'effet si $wgMWOAuthSharedUserIDs est mis à false

$wgMWOAuthRequestExpirationAge 2592000 (30 days) Nombre de secondes après lequel une requête idle de nouveau consommateur passe à l'état expired
$wgMWOAuthSecureTokenTransfer true Nécessite SSL/TLS pour renvoyer le client et les informations secrètes de l'utilisateur. Ceci est nécéssaire pour RFC 5849, néanmoins si un wiki souhaite utiliser OAuth mais qu'il ne prend pas en charge SSL, cette option permet d'utiliser cette configuration. Doit être mis à true dans la plupart des configurations de production.
$wgOAuthSecretKey $wgSecretKey Chaîne secrète servant à la configuration (valeur aléatoire de 32 bits générée avec base64_encode(random_bytes(32))) et utilisée pour le HMAC avec la clé secrète trouvée dans la base de données, afin de générer les clés secrètes des consommateurs. Cela fournit une certaine protection contre un attaquant qui lirait les valeurs dans la table des consommateurs (il lui faudrait aussi $wgOAuthSecretKey pour générer les clés secrètes valides), et contre certaines faillles potentielles dans la génération des clés secrètes. Si la chaîne pose problème, le site doit générer un nouveau $wgOAuthSecretKey qui invalide les permissions du consommateur utilisant les signatures secrètes partagées de HMAC à la place des clés privées et publiques. Les consommateurs peuvent regénérer une nouvelle clé secrète en utilisant l'option de regénération « Reset the secret key » de Special:MWOAuthConsumerRegistration/update. Si nul, la valeur est mise à $wgSecretKey.
$wgOAuthGroupsToNotify [] Liste des goupes utilisateur à notifier pour les propositions de nouveaux consommateurs. Cette initialisation ne sera effective que si Echo est installé.
$wgMWOauthDisabledApiModules [] Liste des classes des modules API à désactiver quand OAuth est utilisé pour la requête
$wgMWOAuthReadOnly false Empêche toute écriture dans la base de données. Lorsque ceci est initialisé, les consommateurs ne peuvent pas être ajoutés ni mis à jour et les nouvelles autorisations ne sont plus délivrées. Les entêtes d'autorisation pour les autorisations existantes, continueront à fonctionner. Sert lors de la migration des tables de la base de données
$wgMWOAuthSessionCacheType $wgSessionCacheType Mécanisme de stockage pour les données de session. Si nul, la valeur est $wgSessionCacheType par défaut.
$wgOAuth2EnabledGrantTypes
[
"authorization_code",
"refresh_token",
"client_credentials"
]
Liste des autorisations OAuth2 que les applications du client peuvent utiliser. Les autorisations actuelles que les applications du client pourront utiliser peuvent faire partie de n'importe quel sous ensemble des autorisations qui figurent ici. Les droits autres que ceux listés ici, sont considérés comme des droits historiques et ne sont pas pris en charge par cette extension
$wgOAuth2PrivateKey "" Clé privée ou chemin vers la clé privée utilisée pour signer le OAuth2 JWT à transmettre. See the OAuth 2.0 Server documentation for how to generate the keys.
$wgOAuth2PublicKey "" Clé publique ou chemin vers la clé publique utilisée pour vérifier les requêtes de ressources OAuth2.
$wgOAuth2RequireCodeChallengeForPublicClients true Indique si les clients doivent envoyer des défis de code avec les requêtes OAuth2. Ceci ne s'applique qu'aux clients non confidentiels.
$wgOAuth2GrantExpirationInterval "PT1H" Contrôle la période de validité des jetons d'accès. Ne concerne pas les clients du propriétaire pour lesquels les jetons d'accès n'expirent jamais. Accepte les durées au format ISO 8601 ou peut être mis à infinity ou à false pour les jetons qui n'expirent jamais.
$wgOAuth2RefreshTokenTTL "PT1M" Contrôle la période de validité des jetons de rafraîchissement. Accepte les durées au format ISO 8601 ou peut être mis à infinity ou à false pour les jetons qui n'expirent jamais.

Points d'accès REST de OAuth 2.0

Les points d'accès REST suivants sont fournis pour interagir avec OAuth 2.0

Chemin Description Paramètres autorisés Méthode autorisée
/oauth2/authorize Sert à récupérer le code d'autorisation si authorization_code est diffusable (grant).
Nom Obligatoire ? Description
response_type oui
client_id oui
redirect_uri non s'il est présent, il doit correspondre exactement à l'URI qui a été déclaré lorsque le client a été enregistré
scope non
state non
code_challenge non obligatoire si $wgOAuth2RequireCodeChallengeForPublicClients vaut true
code_challenge_method non obligatoire si $wgOAuth2RequireCodeChallengeForPublicClients vaut true
GET
/oauth2/access_token Sert à demander des jetons d'accès
Nom Obligatoire ? Description
grant_type oui type de publication utilisé
client_id non
client_secret non obligatoire si le client est confidential
redirect_uri non s'il est présent, il doit correspondre exactement à l'URI qui a été déclaré lorsque le client a été enregistré
scope non
code non obligatoire si la publication de authorization_code est utilisée
refresh_token non obligatoire si la publication de refresh_token est utilisée
code_verifier non
POST
/oauth2/resource/{{type}} Sert à récupérer les ressources protégées en utilisant le jeton d'accès obtenu précédemment.

Actuellement, deux types de ressources peuvent être récupérés via ce point d'accès, en remplaçant {{type}} par la clé du type, soit :

  • profile - pour récupèrer le profil de l'utilisateur associé au jeton d'accès utilisé pour faire la requête - sert habituellement à connecter via MediaWiki, les utilisateurs à des sites web tiers
  • scopes - pour récupérer toutes les cibles que le client (l'application) est autorisé à utiliser avec le jeton d'accès actuel
Aucun paramètre n'est autorisé, autre que le paramètre {{type}} figurant dans le chemin GET/POST
/oauth2/client Liste les clients OAuth 1.0a ou 2.0 de l'utilisateur connecté. L'authentification peut se faire par CentralAuth ou en insérant un jeton d'accès dans l'entête d'autorisation.
Exemple de réponse
{
  "clients": [
    {
      "client_key": "xxxxxxxxxxxxxx",
      "name": "TestFromCurl1807",
      "version": "2.0",
      "email": "admin@example.com",
      "callback_url": "http://example.com",
      "scopes": [
        "authonly"
      ],
      "registration": "20200818230806",
      "stage": 0,
      "oauth_version": 2,
      "description": "foo",
      "allowed_grants": [
        "authorization_code"
      ],
      "registration_formatted": "23:08, 18 August 2020"
    }
  ],
  "total": 1
}
  • oauth_version (optionnel) - soit 1 (pour ne renvoyer que les clients OAuth 1.0a) ou 2 (pour ne renvoyer que les clients OAuth 2.0). Valeur par défaut : 2
  • Paramètres de mise en page
    • limit (optionnel) - nombre maximum de clients à renvoyer. Valeur par défaut : 25
    • offset (optionnel) - nombre de clients à sauter avant de renvoyer le premier résultat. Valeur par défaut : 0
GET
/oauth2/client/{client_key}/reset_secret Réinitialise les données secrètes d'un client. Pour les clients propriétaires seulement, ce point d'accès réinitialise également le jeton d'accès.
Exemple de réponse
{
  "name": "Example",
  "client_key": "xxxxxxxxxx",
  "secret": "xxxxxxxxxx",
  "access_token": "xxxxxxxxxx"
}
Nom Obligatoire ? Description Valeur par défaut
client_key oui identifiant du client
reason non chaîne de caractères donnant le motif pour lequel la phrase secrète a été réinitialisée. ''
POST
/oauth2/client Crée un client OAuth 2.0
Exemple de réponse
{
  "name": "Example",
  "client_key": "xxxxxxxxxx",
  "secret": "xxxxxxxxxx",
  "access_token": "xxxxxxxxxx"
}
Nom Obligatoire ? Description Valeur par défaut
name oui nom du client
description oui description du client
email oui adresse courriel de contact
is_confidential oui metttre à true si le client est confidentiel; metttre à false pour les clients publics comme les applications pour mobiles ou pour ordinateur de bureau
grant_types oui Types d'attribution OAuth 2.0 utilisés par le client, une ou plusieurs valeurs parmi : authorization_code, refresh_token, client_credentials
scopes oui Cibles OAuth 2.0, soit mwoauth-authonly, mwoauth-authonlyprivate ou l'ensemble des droits applicables
version non version du client. 1.0
wiki non projet applicable. * pour tous les wikis
owner_only ? mettre à true pour un client utilisé uniquement par l'utilisateur qui l'a créé
callback_url non URL renvoyée pour autoriser les utilisateurs. ''
callback_is_prefix non mettre à true pour permettre au client de préciser une fonction de rappel (callback) dans les requêtes et d'utiliser son URL comme préfixe obligatoire. false
POST
Si les données OAuth sont partagées à l'intérieur d'une ferme de wikis, assurez-vous que les noms réels sont utilisés (ou cachés) de façon cohérente sur tous les wikis (en utilisant $wgHiddenPrefs ). Sur les wikis où les noms réels sont cachés, le message de requête des droits OAuth indiquant à l'utilisateur quelles sont les informations partagées, ne mentionne pas le nom réel, donc dans ce cas, il ne doit y avoir aucun autre wiki à partir duquel le consommateur OAuth pourrait encore récupérer cette information.

Points d'accès REST expérimentaux

Pour autoriser les points d'accès REST expérimentaux, ajoutez la variable de configuration $wgRestAPIAdditionalRouteFiles à LocalSettings.php :

$wgRestAPIAdditionalRouteFiles[] = "$wgExtensionDirectory/OAuth/experimentalRoutes.json";

Voir aussi

  • Extension:OATHAuth - extension de nom similaire qui implémente un deuxième facteur d'authentification à l'aide de mots de passe à usage unique basés sur OATH.
  • Extension:WSOAuth – extension MediaWiki qui permet à votre wiki de déléguer l'authentification à n'importe quel fournisseur OAuth utilisant PluggableAuth, y compris un wiki qui exécute Extension:OAuth.
  • oauthclient-php – bibliothèque cliente pour les consommateurs OAuth.