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

# Authentification avec clé privée JWT

> Décrit comment construire une assertion pour utiliser l’authentification par clé privée JWT.

<Card title="Avant de commencer">
  Vous devez créer une nouvelle application dans l’Auth0 Dashboard ou convertir une application existante avant de continuer. Pour en savoir plus, lisez [Configurer l’authentification par clé privée JWT](https://auth0.com/docs/get-started/applications/configure-private-key-jwt).
</Card>

Vous devez effectuer deux étapes lorsque vous vous authentifiez avec `private_key_jwt` :

1. Construire l’assertion client. Cette assertion est un jeton Web JSON signé par la clé privée lorsque vous avez généré la paire de clés. Pour savoir comment générer une paire de clés, lisez [Configurer l’authentification par clé privée JWT](/docs/fr-ca/get-started/applications/configure-private-key-jwt).
2. Utiliser l’assertion pour vous authentifier auprès d’Auth0.

## Construire l’assertion

Vous pouvez utiliser l’une des trousses SDK Auth0 pour qu’elle crée une assertion automatiquement pour vous. Si vous n’utilisez pas nos trousses SDK, vous devrez créer l’assertion vous-même.

L’assertion est un jeton Web JSON (<Tooltip href="/docs/fr-ca/glossary?term=json-web-token" tip="Jeton Web JSON (JWT)
Format standard de jeton d’ID (et souvent de jeton d’accès) utilisé pour représenter en toute sécurité des demandes entre deux parties." cta="Voir le glossaire">JWT</Tooltip>) qui doit contenir les propriétés et les demandes suivantes :

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Toutes les demandes sont requises sauf si mentionné autrement. Pour en savoir plus sur les demandes JWT, consultez [Demandes de jetons Web JSON](/docs/fr-ca/secure/tokens/json-web-tokens/json-web-token-claims).
</Callout>

* En-tête

  * `alg` : L’algorithme utilisé pour signer l’assertion. L’algorithme doit correspondre à l’algorithme spécifié lors de la création de l’identifiant de l’application.
  * `kid`**:** (facultatif) Le `kid` de l’identifiant généré par Auth0. Le `kid` est créé lors de la création de l’identifiant.
* Charge utile

  * `iss`**:** L’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/), onglet **Settings (Paramètres)**.

  * `sub`**:** L’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/), onglet **Settings (Paramètres)**.

  * `aud`**:** L’URL du locataire Auth0 ou du domaine personnalisé qui reçoit l’assertion. Par exemple : `https://{yourTenant}.auth0.com/`**.** Inclure 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é en tant que demande `aud`. Nous recommandons dans ce cas d’utiliser le domaine personnalisé.
    </Callout>

  * `iat`  (facultatif) et `exp` : Les affirmations « Issued At » (Émis le) et « Expiration » (expiré) sont définies sur les horodatages corrects. L’assertion client est un jeton à usage unique, et nous recommandons le délai d’expiration le plus court possible. Auth0 prend en charge un maximum de 5 minutes pour la durée de vie d’un jeton.

  * `jti` : Un identifiant de demande unique créé par le client. Nous recommandons d’utiliser le format UUID (Identifiant universellement unique).

    <Warning>
      Ce JWT est un jeton à usage unique et doit être considéré comme tel car son délai d’expiration est court. Nous vous conseillons de configurer une durée maximale 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 par clé privée JWT. Pour savoir comment procéder, consultez la spécification [Jeton Web JSON](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é dès le départ, 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, lisez la liste sur [JWT.io](https://jwt.io/libraries).

### Exemple

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

```javascript lines theme={null}
const { SignJWT } = require('jose')
const crypto = require("crypto");
const uuid = require("uuid");

async function main() {
 const privateKeyPEM = crypto.createPrivateKey(/**
   Read the content of your private key here. We recommend to store your private key
   in a secure infrastructure. 
 */);

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

main();
```

Exemple d’assertion client signée avec une clé privée :

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

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 jeton JWT avec les informations requises, vous êtes prêt à authentifier votre application par rapport à Auth0.

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

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  L’exemple suivant utilise le [Flux Identifiants clients](/docs/fr-ca/get-started/authentication-and-authorization-flow/client-credentials-flow). L’authentification par clé privée JWT peut être utilisée pour les autres types d’autorisation qui autorisent également le remplacement de `client_secret` par `client_assertion`.
</Callout>

Pour échanger l’assertion JWT contre un jeton d’accès, appelez le [point de terminaison](https://auth0.com/docs/api/authentication#authenticate-user) de jeton de l’Authentication API avec les paramètres suivants :

* `$client_assertion`: Affirmation JWT
* `$resource_server_identifier` : identifiant du serveur de ressources. Pour en savoir plus, lisez [Enregistrer des API](/docs/fr-ca/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'
```

## Points de terminaison pris en charge

Outre le point de terminaison [https://\$tenant/oauth/token](https://auth0.com/docs/api/authentication#get-token), les points de terminaison suivants de l’Authentication API Auth0 prennent 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)

## Limites des assertions

La longueur maximale de l’assertion JWT est de 2048 octets.

Les demandes contenues dans l’assertion sont soumises aux limites suivantes :

* `iss` : 64 caractères
* `sub` : 64 caractères
* `jti` : 64 caractères
* `alg` : 16 caractères
