> ## 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 Private Key JWT.

# S’authentifier avec Private Key JWT

<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 Private Key JWT](/docs/fr-ca/get-started/applications/configure-private-key-jwt).
</Card>

Vous devez suivre deux étapes pour vous authentifier avec `private_key_jwt:`

1. Créez l’assertion du client. Cette assertion est un JWT signé à l’aide de la clé privée générée avec la paire de clés. Pour savoir comment générer une paire de clés, consultez [Configurer l’authentification Private Key JWT](/docs/fr-ca/get-started/applications/configure-private-key-jwt).
2. Utilisez l’assertion pour vous authentifier auprès d’Auth0.

<div id="build-the-assertion">
  ## Créer l’assertion
</div>

Vous pouvez utiliser l’un des SDKs d’Auth0 pour créer automatiquement une assertion. Si vous n’utilisez pas nos SDKs, 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="/docs/fr-ca/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 obligatoires, sauf indication contraire. Pour en savoir plus sur les claims JWT, consultez [JSON Web Token Claims](/docs/fr-ca/secure/tokens/json-web-tokens/json-web-token-claims).
</Callout>

* En-tête

  * `alg` : l’algorithme utilisé pour signer l’assertion. Il doit correspondre à celui indiqué lorsque vous avez créé le credential de votre application.
  * `kid`**:** (facultatif) le `kid` généré par Auth0 pour le credential. Le `kid` est créé au moment de la création du credential.
* Payload

  * `iss`**:** le Client ID 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/), puis dans l’onglet **Settings**.
  * `sub`**:** le Client ID de votre application. Vous trouverez également cette valeur dans les paramètres de votre application, sous [Auth0 Dashboard > Applications > Applications](https://manage.auth0.com/dashboard/#/applications/), puis dans l’onglet **Settings**.
  * `aud`**:** l’URL du tenant 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 tenant Auth0, vous pouvez l’utiliser comme claim `aud`. Dans ce cas, nous vous recommandons d’utiliser le domaine personnalisé.
    </Callout>
  * `iat` (facultatif), `nbf` (facultatif) et `exp` : les claims Issued At, Not Before et Expiration, définis avec les horodatages appropriés. Un décalage d’horloge maximal de 10 secondes est permis pour `iat` et `nbf` (s’ils sont présents) afin d’assurer l’interopérabilité. L’assertion du client 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` : un ID de claim unique créé par le client. Nous recommandons d’utiliser le format Universally Unique Identifier (UUID).

    <Warning>
      Ce JWT est un jeton à usage unique et doit être traité comme tel en lui donnant une courte durée d’expiration. Nous recommandons 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 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é d’emblée, plutôt que de l’implémenter vous-même à partir de zéro. Pour en savoir plus sur les bibliothèques compatibles, 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 du client 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 [Client Credential Flow](/docs/fr-ca/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 : information d’identification d’autorisation, sous la forme d’une chaîne opaque ou d’un JWT, utilisée pour accéder à une API." cta="Voir le glossaire" href="/docs/fr-ca/glossary?term=access+token">jeton d’accès</Tooltip>, envoyez une requête au [point de terminaison de jeton](https://auth0.com/docs/api/authentication#authenticate-user) de l’Authentication API 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 requêtes visant des ressources protégées et y répondent." cta="Voir le glossaire" href="/docs/fr-ca/glossary?term=resource+server">serveur de ressources</Tooltip>. Pour en savoir plus, consultez [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'
```

<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 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)

<div id="assertion-limits">
  ## Limites de l’assertion
</div>

La longueur maximale de l’assertion JWT est de 2 048 octets.

Les claims contenus dans l’assertion sont soumis aux limites suivantes :

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

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

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