Flux de code d’autorisation avec les demandes d’autorisation sécurisées par JWT (JAR)
La demande d’autorisation sécurisée par JWT (JAR) est une extension du protocole OAuth2 et ajoute une couche de sécurité pour protéger l’intégrité des paramètres de la demande d’autorisation.
Prérequis
Pour utiliser JAR, vous devez d’abord générer une paire de clés RSA. Ensuite, enregistrez la clé publique auprès d’Auth0 comme expliqué dans la section Configurer les demandes d’autorisation sécurisées par JWT.
Pendant le flux de code d’autorisation, l’application cliente prend les paramètres qu’elle souhaite envoyer aux points de terminaison /authorize
ou /oauth/par
et les enveloppe dans un jeton Web JSON (JWT), qu’elle signe ensuite en utilisant la clé privée.
Le serveur d’autorisation vérifie la signature avec la clé publique de votre application. Si la signature est valide, le serveur d’autorisation extrait les paramètres de la demande du JAR et traite la demande comme d’habitude. Par conséquent, les valeurs des paramètres sont garanties comme provenant d’une source connue et ne peuvent pas être modifiées ou consultées par des intermédiaires
Générer la requête JAR
Pour générer une requête JAR, vous devez d’abord créer un jeton Web JSON (JWT). Utilisez la bibliothèque Auth0 JWT pour vous aider à générer un JWT dans votre langue préférée.
En-tête
Pour une requête JAR, l’en-tête JWT doit contenir les champs suivants :
alg
: L’algorithme utilisé pour signer le JWT. Doit être RS256, RS384 ou PS256.typ
: Le type de JWT. Il doit êtrejwt
ouoauth-authz-req+jwt
.
L’en-tête peut également contenir un champ kid
qui identifie la clé utilisée pour signer le JWT. Si la valeur kid
est présente, Auth0 recherchera une clé publique enregistrée lors de la configuration du JAR et dont l’ID correspond à la clé, et utilisera cette clé pour vérifier la signature du JWT.
Charge utile
La charge utile JWT doit contenir les demandes suivantes :
iss
: doit contenir leclient_id
de votre application.aud
: doit être le domaine de votre locataire, avec le protocole et une barre oblique de fin. Par exemple,https://your_domain.auth0.com/
Le JWT doit également contenir tous les paramètres obligatoires pour l’appel à /authorize
. Par exemple :
client_id
: doit également contenir leclient_id
de votre application.response_type
: indique à Auth0 le flux OAuth 2.0 que vous souhaitez exécuter. Utilisezcode
pour le flux d’octroi de code d’autorisation.
Le JWT peut contenir n’importe quel paramètre optionnel pour le flux d’autorisation demandé, tel que audience
, scope
, state
, redirect_uri
, entre autres.
De plus, le JWT peut contenir les demandes facultatives suivantes :
iat
: doit être une date numérique.nbf
: doit être une date numérique, représentant une période antérieure.exp
: doit être une date numérique, représentant une période future.jti
: doit être une chaîne de caractères ne dépassant pas 64 octets.
Exemple de génération de JWT
L’exemple de code JavaScript suivant montre comment générer et signer un JWT en utilisant JavaScript bibliothèque jsonwebtoken. Il produit le JWT généré dans la console :
const jwt = require('jsonwebtoken');
const crypto = require("crypto");
const fs = require('fs');
const privateKey = fs.readFileSync('[PATH TO YOUR PEM FILE]');
const client_id = '[YOUR CLIENT ID]';
const nonce = crypto.randomBytes(16).toString('hex');
const requestObject = jwt.sign(
{
iss: client_id,
aud: 'https://your_tenant.auth0.com/', // your tenant's domain
client_id,
response_type: "code",
scope: "openid profile",
redirect_uri : "https://myapp.com/callback" // your app's callback URL
nonce
},
privateKey,
{
keyid: '[YOUR KID]', // optional key id (kid) value from your public key
algorithm: 'RS256',
header: {
typ: 'oauth-authz-req+jwt',
},
});
console.log(requestObject);
Was this helpful?
Appeler le point de terminaison d’autorisation
Pour appeler le point de terminaison /authorize
à l’aide de votre JWT signé, ouvrez une nouvelle fenêtre de navigateur. Transmettez votre ID client comme paramètre client_id
et le JWT signé et encodé en URL comme paramètre request
.
# MacOS
open "https://your_tenant.auth0.com/authorize?client_id=[YOUR CLIENT ID]&request=[URL ENCODED JWT]"
# Windows
explorer "https://your_tenant.auth0.com/authorize?client_id=[YOUR CLIENT ID]&request=[URL ENCODED JWT]"
Was this helpful?