Passer au contenu principal

Avant de commencer

Vous devez créer une nouvelle application dans Auth0 Dashboard ou convertir une application existante avant de continuer. Pour en savoir plus, consultez Configurer l’authentification avec un JWT à clé privée.
L’authentification avec private_key_jwt comporte deux étapes :
  1. Créez l’assertion de l’application. Cette assertion est un JWT signé avec la clé privée que vous avez utilisée pour générer la paire de clés. Pour savoir comment générer une paire de clés, consultez Configurer l’authentification avec un JWT à clé privée.
  2. Utilisez l’assertion pour vous authentifier auprès d’Auth0.

Construire l’assertion

Vous pouvez utiliser l’un des SDK Auth0 pour construire automatiquement une assertion. Si vous n’utilisez pas nos SDK, vous devrez construire l’assertion vous-même. L’assertion est un (JWT) qui doit contenir les propriétés et claims suivants :
Tous les claims sont requis, sauf indication contraire. Pour en savoir plus sur les claims JWT, consultez JSON Web Token Claims.
  • En-tête
    • alg : algorithme utilisé pour signer l’assertion. L’algorithme doit correspondre à celui spécifié lorsque vous avez créé les identifiants de votre application.
    • kid: (facultatif) kid généré par Auth0 pour l’identifiant. Le kid est créé lorsque vous créez l’identifiant.
  • Charge utile
    • iss: ID client de votre application. Vous trouverez cette valeur dans les paramètres de votre application sous Auth0 Dashboard > Applications > Applications en sélectionnant l’onglet Settings.
    • sub: ID client de votre application. Vous pouvez également trouver cette valeur dans les paramètres de votre application. Vous trouverez cette valeur dans les paramètres de votre application sous Auth0 Dashboard > Applications > Applications en sélectionnant l’onglet Settings.
    • aud: URL du locataire Auth0 ou du domaine personnalisé qui reçoit l’assertion. Par exemple : https://{yourTenant}.auth0.com/. Incluez la barre oblique finale.
      Si vous avez configuré un domaine personnalisé pour votre locataire Auth0, il peut être utilisé comme claim aud. Nous recommandons d’utiliser le domaine personnalisé dans ce cas.
    • iat (facultatif), nbf (facultatif) et exp : claims Issued At, Not Before et Expiration définis avec les horodatages appropriés. Un décalage d’horloge pouvant aller jusqu’à 10 secondes est autorisé pour iat et nbf (s’ils sont présents) afin d’assurer l’interopérabilité. L’assertion d’application est un jeton à usage unique, et nous recommandons la durée d’expiration la plus courte possible. Auth0 prend en charge une durée de vie maximale de 5 minutes pour un jeton.
    • jti : identifiant de claim unique créé par l’application. Nous recommandons d’utiliser le format Universally Unique Identifier (UUID).
      Ce JWT est un jeton à usage unique et doit être traité comme tel avec une courte durée d’expiration. Nous recommandons de définir un maximum de 1 minute.
Le jeton doit ensuite être signé avec la clé privée que vous avez générée lorsque vous avez créé ou configuré votre application pour l’authentification Private Key JWT. Pour savoir comment faire, consultez la spécification JSON Web Token. Nous vous recommandons de construire le jeton à l’aide d’outils standard ou de bibliothèques tierces qui prennent en charge cette fonctionnalité prêtes à l’emploi, plutôt que de l’implémenter vous-même à partir de zéro. Pour en savoir plus sur les bibliothèques prises en charge, consultez la liste sur JWT.io.

Exemple

Dans l’exemple ci-dessous, le script Node.js utilise le package jose pour générer l’assertion :
const { SignJWT } = require('jose')
const crypto = require("crypto");
const uuid = require("uuid");

async function main() {
 const privateKeyPEM = crypto.createPrivateKey(/**
   Lisez le contenu de votre clé privée ici. Nous vous recommandons de stocker votre clé privée
   dans une infrastructure sécurisée. 
 */);

 const jwt = await new SignJWT({})
   .setProtectedHeader({ 
      alg: 'RS256', // ou RS384 ou PS256
      kid: '(OPTIONAL) KID_GENERATED_BY_AUTH0' 
   })
   .setIssuedAt()
   .setIssuer('CLIENT_ID')
   .setSubject('CLIENT_ID')
   .setAudience('https://YOUR_TENANT.auth0.com/') // ou votre CUSTOM_DOMAIN
   .setExpirationTime('1m')
   .setJti(uuid.v4())
   .sign(privateKeyPEM);
  console.log(jwt)
}

main();
Exemple d’assertion d’application signée avec une clé privée :
private key example
Ce qui correspond à :
{
  "alg": "RS256",
  "kid": "my kid"
}
{
  "iat": 1626684584,
  "iss": "my client id",
  "sub": "my client id",
  "aud": "https://mytenant.auth0.com/",
  "exp": 1626684644,
  "jti": "e4dc8ed1-b108-4901-8bbc-c07a791817e7"
}
Après avoir généré le JWT avec les informations requises, vous pouvez maintenant authentifier votre application auprès d’Auth0.

Échanger une assertion contre des jetons d’accès

L’exemple suivant utilise le flux Client Credentials. L’authentification Private Key JWT peut aussi être utilisée avec d’autres types d’octroi qui permettent de remplacer client_secret par client_assertion.
Pour échanger l’assertion JWT contre un , appelez le point de terminaison de jeton de l’API d’authentification avec les paramètres suivants :
  • $client_assertion : assertion JWT
  • $resource_server_identifier : identifiant du . Pour en savoir plus, consultez Enregistrer des API.
curl --location --request POST 'https://$tenant/oauth/token' \
  --header 'Content-Type: application/x-www-form-urlencoded' \
  --data-urlencode 'grant_type=client_credentials' \
  --data-urlencode 'client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer' \
  --data-urlencode 'client_assertion=$client_assertion' \
  --data-urlencode 'audience=$resource_server_idenifier'

Points de terminaison pris en charge

En plus du point de terminaison https://$tenant/oauth/token, les points de terminaison suivants de l’API d’authentification d’Auth0 prennent également en charge l’authentification private_key_jwt pour les applications configurées :

Limites des assertions

La longueur maximale de l’assertion JWT est de 2048 octets. Les claims contenus dans l’assertion sont soumises aux limites suivantes :
  • iss : 64 caractères
  • sub : 64 caractères
  • jti : 64 caractères
  • alg : 16 caractères

En savoir plus