> ## Documentation Index
> Fetch the complete documentation index at: https://translations.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Décrit comment créer une assertion pour utiliser l’authentification avec un JWT à clé privée.

# S’authentifier avec un JWT à clé privée

<Card title="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](/fr-CA/docs/get-started/applications/configure-private-key-jwt).
</Card>

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](/fr-CA/docs/get-started/applications/configure-private-key-jwt).
2. Utilisez l’assertion pour vous authentifier auprès d’Auth0.

<div id="build-the-assertion">
  ## Construire l’assertion
</div>

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 <Tooltip tip="JSON Web Token (JWT) : format standard de ID Token (et souvent de Jeton d’accès) utilisé pour représenter des claims de façon sécurisée entre deux parties." cta="Voir le glossaire" href="/fr-CA/docs/glossary?term=JSON+Web+Token">JSON Web Token</Tooltip> (JWT) qui doit contenir les propriétés et claims suivants :

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Tous les claims sont requis, sauf indication contraire. Pour en savoir plus sur les claims JWT, consultez [JSON Web Token Claims](/fr-CA/docs/secure/tokens/json-web-tokens/json-web-token-claims).
</Callout>

* 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](https://manage.auth0.com/dashboard/#/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](https://manage.auth0.com/dashboard/#/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.

    <Callout icon="file-lines" color="#0EA5E9" iconType="regular">
      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.
    </Callout>
  * `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).

    <Warning>
      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.
    </Warning>

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](https://www.rfc-editor.org/rfc/rfc7519#section-7.1).

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](https://jwt.io/libraries).

<div id="example">
  ### Exemple
</div>

Dans l’exemple ci-dessous, le script Node.js utilise le package [jose](https://github.com/panva/jose) pour générer l’assertion :

```javascript lines expandable theme={null}
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 :

<Frame>
  <img src="https://mintcdn.com/translations/pvjQqAy3EB2TK6NP/docs/images/cdy7uua7fh8z/4O8zb1gZnEmUQ6FrRkfmlc/a30b73e09d51ca0b4bf929b91571a80a/2023-03-13_16-53-54.png?fit=max&auto=format&n=pvjQqAy3EB2TK6NP&q=85&s=bff6788a805adfd75607532c7cb8556f" alt="private key example" width="1256" height="400" data-path="docs/images/cdy7uua7fh8z/4O8zb1gZnEmUQ6FrRkfmlc/a30b73e09d51ca0b4bf929b91571a80a/2023-03-13_16-53-54.png" />
</Frame>

Ce qui correspond à :

```json lines theme={null}
{
  "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.

<div id="exchange-assertion-for-access-tokens">
  ## Échanger une assertion contre des jetons d’accès
</div>

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  L’exemple suivant utilise le [flux Client Credentials](/fr-CA/docs/get-started/authentication-and-authorization-flow/client-credentials-flow). 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`.
</Callout>

Pour échanger l’assertion JWT contre un <Tooltip tip="Jeton d’accès : justificatif d’autorisation, sous la forme d’une chaîne opaque ou d’un JWT, utilisé pour accéder à une API." cta="Voir le glossaire" href="/fr-CA/docs/glossary?term=access+token">jeton d’accès</Tooltip>, appelez le [point de terminaison de jeton](https://auth0.com/docs/api/authentication#authenticate-user) de l’API d’authentification avec les paramètres suivants :

* `$client_assertion` : assertion JWT
* `$resource_server_identifier` : identifiant du <Tooltip tip="Serveur de ressources : serveur hébergeant des ressources protégées. Les serveurs de ressources acceptent les demandes de ressources protégées et y répondent." cta="Voir le glossaire" href="/fr-CA/docs/glossary?term=resource+server">serveur de ressources</Tooltip>. Pour en savoir plus, consultez [Enregistrer des API](/fr-CA/docs/get-started/auth0-overview/set-up-apis).

```bash lines theme={null}
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'
```

<div id="supported-endpoints">
  ## Points de terminaison pris en charge
</div>

En plus du point de terminaison [https://\$tenant/oauth/token](https://auth0.com/docs/api/authentication#get-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 :

* [POST /oauth/revoke](https://auth0.com/docs/api/authentication#revoke-refresh-token)
* [POST /mfa/challenge](https://auth0.com/docs/api/authentication#challenge-request)
* [POST /passwordless/start](https://auth0.com/docs/api/authentication#get-code-or-link)

<div id="assertion-limits">
  ## Limites des assertions
</div>

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

<div id="learn-more">
  ## En savoir plus
</div>

* [Configurer l’authentification Private Key JWT](/fr-CA/docs/get-started/applications/configure-private-key-jwt)
* [Authentification du client par Private Key JWT pour les connexions Okta et OIDC](/fr-CA/docs/authenticate/enterprise-connections/private-key-jwt-client-auth)
