Skip to main content
Pour utiliser les fonctionnalités Highly Regulated Identity, vous devez avoir un plan Enterprise avec le module complémentaire Highly Regulated Identity. Consultez Auth0 Pricing pour en savoir plus.
Une requête d’autorisation sécurisée par JWT (JAR) est une extension du protocole OAuth 2.0 qui protège l’intégrité et l’authenticité des paramètres de requête d’autorisation. En encapsulant ces paramètres dans un JSON Web Token (JWT) signé, vous empêchez les intermédiaires de modifier ou de consulter des données de requête sensibles.

Prérequis

Avant d’utiliser JAR, vous devez :
  1. Générer une paire de clés RSA
  2. Enregistrer la clé publique en la téléversant dans l’Auth0 Dashboard, comme décrit dans Configurer les requêtes d’autorisation sécurisées par JWT

Fonctionnement

Au lieu de transmettre des paramètres comme scope ou redirect_uri en texte brut dans une URL, l’application cliente les regroupe dans un JSON Web Token (JWT) signé sous forme d’objet de requête :
  • Signature : l’application cliente signe le JWT à l’aide de sa clé privée.
  • Vérification : serveur d’autorisation Auth0 reçoit le JWT et vérifie la signature à l’aide de la clé publique que vous avez enregistrée.
  • Traitement : s’il est valide, serveur d’autorisation Auth0 extrait les paramètres. Si un paramètre est présent à la fois dans le JAR et dans la chaîne de requête, la valeur du JAR a priorité.

Générer la requête JAR

Utilisez la bibliothèque JWT d’Auth0 pour générer un dans le langage de votre choix. L’en-tête du JWT indique à Auth0 quelle clé et quel algorithme utiliser pour la vérification. Il doit contenir les paramètres suivants :
  • alg : L’algorithme utilisé pour signer le JWT. Il doit s’agir de RS256, RS384 ou PS256.
  • typ : Le type de JWT. Il doit s’agir de jwt ou de oauth-authz-req+jwt.
L’en-tête peut aussi contenir un champ kid qui identifie la clé utilisée pour signer le JWT. Si un kid est présent, Auth0 recherchera une clé publique enregistrée lors de la configuration de JAR ayant un ID de clé correspondant et utilisera cette clé pour vérifier la signature du JWT.

Payload

Le payload contient les paramètres d’autorisation. Il doit contenir les claims suivants :
  • iss : doit contenir le client_id de votre application
  • aud : doit contenir le domaine de votre tenant, avec le protocole et une barre oblique à la fin. Par exemple, https://{YOUR_DOMAIN}.auth0.com/
Le JWT doit aussi contenir tous les paramètres obligatoires de la requête à /authorize. Par exemple :
  • client_id : doit aussi contenir le client_id de votre application
  • response_type : indique à Auth0 quel flux vous voulez utiliser. Utilisez code pour le flux d’octroi de code d’autorisation.
Le JWT peut contenir n’importe lequel des paramètres facultatifs du demandé, comme audience, scope, state, redirect_uri, entre autres. De plus, le JWT peut contenir les claims facultatifs suivants :
  • iat : doit être une date numérique.
  • nbf : doit être une date numérique représentant un moment dans le passé.
  • exp : doit être une date numérique représentant un moment dans l’avenir.
  • jti : doit être une chaîne d’au plus 64 octets.

Exemple de code : générer et signer un JAR

L’exemple Node.js suivant utilise la bibliothèque jsonwebtoken pour générer et signer un JAR :

Appeler le point de terminaison d’autorisation

Vous pouvez envoyer le JAR au serveur d’autorisation Auth0 de la façon suivante :
  1. requête JAR standard : transmettez le JWT signé sous forme de chaîne encodée dans l’URL dans le paramètre de requête.
  2. requête d’autorisation poussée : pour une sécurité accrue et pour éviter les contraintes de longueur d’URL, utilisez PAR.

Requête JAR standard

Pour appeler le point de terminaison /authorize au moyen d’une requête JAR standard :
  1. Ouvrez une nouvelle fenêtre de navigateur.
  2. Fournissez votre dans le paramètre client_id, et le JWT signé et encodé pour une URL dans le paramètre request.

Requête d’autorisation poussée

Pour effectuer une requête à l’endpoint /authorize avec une requête d’autorisation poussée :
  1. Envoyez le JAR à l’endpoint /oauth/par au moyen d’une requête POST sur le back-channel.
  2. Auth0 renverra un request_uri, que vous pourrez ensuite utiliser pour effectuer une requête à l’endpoint /authorize, comme dans un flux PAR standard.
La requête cURL suivante utilise PAR et JAR conjointement :

En savoir plus