Configurer le chiffrement Web JSON (JWE)
Par défaut, Auth0 émet des jetons d’accès formatés en tant que Jeton Web JSON (JWT) signé, ce qui signifie qu’ils sont protégés contre les menaces d’intégrité, mais que les clients et autres intermédiaires peuvent toujours les inspecter. Cela peut entraîner une perte de confidentialité des informations sur les données destinées uniquement à être exposées à un serveur de ressources.
Pour empêcher l’inspection non autorisée des jetons d’accès, Auth0 prend en charge l’utilisation de jetons d’accès JWT imbriqués, où les informations d’accès sont signées dans un JWT puis chiffrées et représentées avec le chiffrement Web JSON (JWE). Les serveurs de ressources sont censés déchiffrer ces jetons d’accès et vérifier la signature de la charge utile JWT pendant que l’information est opaque pour toute autre partie.
Générer une paire de clés RSA
Avant de configurer une API pour utiliser JWE, vous devez générer une paire de clés RSA.
La clé privée doit rester secrète. Télécharger la clé publique dans Auth0, encodée au format PEM, comme décrit dans générer une paire de clés RSA. Seul le serveur de ressources ou le serveur API peut accéder en toute sécurité à la clé privée pour déchiffrer le jeton d’accès.
Configurer JWE pour une API
Utilisez Auth0 Dashboard pour configurer JWE pour votre API. Pour commencer, activez l’option du chiffrement Web JSON (JWE) sous les paramètres de jeton pour votre API

Lorsque vous y êtes invité, ajoutez une clé de chiffrement Web JSON (JWE) :
Entrez un nom facile à retenir pour simplifier l’identification.
Téléversez un certificat avec la clé publique chiffrée en format PEM.
Sélectionnez l’algorithme de chiffrement.
(Facultatif) Entrez un identifiant de clé.
Cliquez sur Add (Ajouter) pour enregistrer la clé JWE, ce qui générera un schéma du certificat.
Utilisez la Management API d’Auth0 pour configurer JWE pour un serveur de ressources ou un serveur API. Vous devez configurer JWE pour chaque API, de sorte que chaque API dispose de sa propre clé de chiffrement publique.
La requête POST suivante configure une nouvelle API pour qu’elle reçoive les jetons d’accès chiffrés :
curl -X POST --location "https://{domain}/api/v2/resource-servers" \
-H "Authorization: Bearer {managementAccessToken}" \
-H "Content-Type: application/json" \
--data-raw '{
"name": "{apiName}",
"identifier": "{apiIdentifier}",
"token_encryption": {
"format": "compact-nested-jwe",
"encryption_key":
{
"name": "{credentialName}",
"pem": "{pem}",
"alg": "{alg}",
"kid": "{kid}"
}
}
}'
Was this helpful?
Le tableau suivant explique ce que signifient les différents paramètres :
Paramètre | Obligatoire? | Description |
---|---|---|
apiName |
Obligatoire | Le nom de votre nouvelle API. |
apiIdentifier |
Obligatoire | L’identifiant unique de votre API. Il sera utilisé comme audience de jetons. |
credentialName |
Facultatif | Le nom de votre clé publique. |
pem |
Obligatoire | Clé publique encodée au format PEM. |
alg |
Obligatoire | L’algorithme de chiffrement doit être RSA-OAEP-256 , RSA-OAEP-384 , ou RSA-OAEP-512 . |
kid |
Facultatif | L’identifiant utilisé pour écrire dans l’en-tête kid de votre jeton JWE. Il peut être utilisé pour identifier la clé utilisée pour le chiffrement pendant la rotation des clés. |
La réponse contient la propriété id
qui identifie de manière unique le serveur de ressources. La réponse contient également un champ thumbprint_sha256
généré qui peut être utilisé pour identifier l’identifiant. Auth0 ne renverra pas de matériel de clé après la création initiale (dans ce cas, votre PEM).
Il existe de nombreuses façons de générer le champ thumbprint_sha256
. Pour plus d’informations, consultez Authentification du client mutuel-TLS RFC 8705 OAuth 2.0 et Jetons d’accès liés au certificat.
Pour vous assurer d’avoir généré le bon champ thumbprint_sha256
, vous pouvez utiliser l’exemple de code Node.js pour extraire l’empreinte numérique :
const fs = require('fs');
const crypto = require('crypto');
const { calculateJwkThumbprint, exportJWK } = require('jose');
const publicKeyObject = crypto.createPublicKey(fs.readFileSync('./my_cert.pem'));
exportJWK(publicKeyObject).then((jwk) => {
calculateJwkThumbprint(jwk, 'sha256').then((thumbprint) => {
console.log(thumbprint);
});
});
Was this helpful?