> ## 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.

> Apprenez à utiliser les requêtes d’autorisation sécurisées par JWT (JAR) avec le flux de code d’autorisation.

# Flux de code d’autorisation avec des requêtes d’autorisation sécurisées par JWT (JAR)

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Pour utiliser les fonctionnalités Highly Regulated Identity, vous devez avoir un plan Enterprise avec le module complémentaire Highly Regulated Identity. Consultez [Auth0 Pricing](https://auth0.com/pricing/) pour en savoir plus.
</Callout>

Une [requête d’autorisation sécurisée par JWT (JAR)](https://datatracker.ietf.org/doc/html/rfc9101) est une extension du protocole OAuth 2.0 qui protège l’intégrité et l’authenticité des paramètres de requête d’autorisation. En encapsulant ces paramètres dans un [JSON Web Token (JWT)](/docs/fr-ca/secure/tokens/json-web-tokens) signé, vous empêchez les intermédiaires de modifier ou de consulter des données de requête sensibles.

<div id="prerequisites">
  ## Prérequis
</div>

Avant d’utiliser JAR, vous devez :

1. [Générer une paire de clés RSA](/docs/fr-ca/secure/application-credentials/generate-rsa-key-pair)
2. Enregistrer la clé publique en la téléversant dans l’Auth0 Dashboard, comme décrit dans [Configurer les requêtes d’autorisation sécurisées par JWT](/docs/fr-ca/get-started/applications/configure-jar)

<div id="how-it-works">
  ## Fonctionnement
</div>

Au lieu de transmettre des paramètres comme `scope` ou `redirect_uri` en texte brut dans une URL, l’application cliente les regroupe dans un [JSON Web Token (JWT)](/docs/fr-ca/secure/tokens/json-web-tokens) signé sous forme d’objet de requête :

* Signature : l’application cliente signe le JWT à l’aide de sa clé privée.
* Vérification : serveur d’autorisation Auth0 reçoit le JWT et vérifie la signature à l’aide de la clé publique que vous avez enregistrée.
* Traitement : s’il est valide, serveur d’autorisation Auth0 extrait les paramètres. Si un paramètre est présent à la fois dans le JAR et dans la chaîne de requête, la valeur du JAR a priorité.

<div id="generate-the-jar-request">
  ## Générer la requête JAR
</div>

Utilisez la [bibliothèque JWT d’Auth0](https://jwt.io/libraries) pour générer un <Tooltip tip="JSON Web Token (JWT) : format standard de jeton ID (et souvent de jeton d’accès) servant à représenter des claims de manière sécurisée entre deux parties." cta="Voir le glossaire" href="/docs/fr-ca/glossary?term=JWT">JWT</Tooltip> dans le langage de votre choix.

<div id="header">
  ### En-tête
</div>

L’en-tête du JWT indique à Auth0 quelle clé et quel algorithme utiliser pour la vérification. Il doit contenir les paramètres suivants :

* `alg` : L’algorithme utilisé pour signer le JWT. Il doit s’agir de RS256, RS384 ou PS256.
* `typ` : Le type de JWT. Il doit s’agir de `jwt` ou de `oauth-authz-req+jwt`.

L’en-tête peut aussi contenir un champ `kid` qui identifie la clé utilisée pour signer le JWT. Si un `kid` est présent, Auth0 recherchera une clé publique enregistrée lors de la [configuration de JAR](/docs/fr-ca/get-started/applications/configure-jar) ayant un ID de clé correspondant et utilisera cette clé pour vérifier la signature du JWT.

<div id="payload">
  ### Payload
</div>

Le payload contient les paramètres d’autorisation. Il doit contenir les claims suivants :

* `iss` : doit contenir le `client_id` de votre application
* `aud` : doit contenir le domaine de votre tenant, avec le protocole et une barre oblique à la fin. Par exemple, `https://{YOUR_DOMAIN}.auth0.com/`

Le JWT doit aussi contenir tous les paramètres obligatoires de la requête à `/authorize`. Par exemple :

* `client_id` : doit aussi contenir le `client_id` de votre application
* `response_type` : indique à Auth0 quel <Tooltip tip="OAuth 2.0 : cadre d’autorisation qui définit les protocoles et les workflows d’autorisation." cta="Voir le glossaire" href="/docs/fr-ca/glossary?term=OAuth+2.0">OAuth 2.0</Tooltip> flux vous voulez utiliser. Utilisez `code` pour le flux d’octroi de code d’autorisation.

Le JWT peut contenir n’importe lequel des paramètres facultatifs du <Tooltip tip="Flux d’autorisation : grant d’autorisation (ou workflow) spécifié dans le framework OAuth 2.0." cta="Voir le glossaire" href="/docs/fr-ca/glossary?term=authorization+flow">flux d’autorisation</Tooltip> demandé, comme `audience`, `scope`, `state`, `redirect_uri`, entre autres.

De plus, le JWT peut contenir les claims facultatifs suivants :

* `iat` : doit être une date numérique.
* `nbf` : doit être une date numérique représentant un moment dans le passé.
* `exp` : doit être une date numérique représentant un moment dans l’avenir.
* `jti` : doit être une chaîne d’au plus 64 octets.

<div id="code-sample-generate-and-sign-jar">
  ## Exemple de code : générer et signer un JAR
</div>

L’exemple Node.js suivant utilise la [bibliothèque jsonwebtoken](https://www.npmjs.com/package/jsonwebtoken?activeTab=readme) pour générer et signer un JAR :

```javascript lines expandable theme={null}
const jwt = require('jsonwebtoken');
const crypto = require("crypto");
const fs = require('fs');

const privateKey = fs.readFileSync('{PATH_TO_YOUR_PEM_FILE}');
const client_id = '{YOUR_CLIENT_ID}';
const nonce = crypto.randomBytes(16).toString('hex');

const requestObject = jwt.sign(
{
  iss: client_id,    
  aud: 'https://your_tenant.auth0.com/', // domaine de votre tenant
  client_id,
  response_type: "code",
  scope: "openid profile",
  redirect_uri : "https://myapp.com/callback", // callback URL de votre application
  nonce
},
privateKey,
{
  keyid: '{YOUR_KID}', // valeur facultative du Key ID (kid) de votre clé publique
  algorithm: 'RS256',
  header: {
    typ: 'oauth-authz-req+jwt',
  },
});

console.log(requestObject);
```

<div id="call-the-authorization-endpoint">
  ## Appeler le point de terminaison d’autorisation
</div>

Vous pouvez envoyer le JAR au serveur d’autorisation Auth0 de la façon suivante :

1. [requête JAR standard](#standard-jar-request) : transmettez le JWT signé sous forme de chaîne encodée dans l’URL dans le paramètre de requête.
2. [requête d’autorisation poussée](#pushed-authorization-request) : pour une sécurité accrue et pour éviter les contraintes de longueur d’URL, utilisez PAR.

<div id="standard-jar-request">
  ### Requête JAR standard
</div>

Pour appeler le point de terminaison `/authorize` au moyen d’une requête JAR standard :

1. Ouvrez une nouvelle fenêtre de navigateur.
2. Fournissez votre <Tooltip tip="Client ID : valeur d’identification attribuée à votre ressource enregistrée par Auth0." cta="Voir le glossaire" href="/docs/fr-ca/glossary?term=Client+ID">Client ID</Tooltip> dans le paramètre `client_id`, et le JWT signé et encodé pour une URL dans le paramètre `request`.

```bash lines theme={null}
# macOS
open "https://{YOUR_DOMAIN}.auth0.com/authorize?client_id={YOUR_CLIENT_ID}&request={URL_ENCODED_JWT}"

# Windows
explorer "https://{YOUR_DOMAIN}.auth0.com/authorize?client_id={YOUR_CLIENT_ID}&request={URL_ENCODED_JWT}"
```

<div id="pushed-authorization-request">
  ### Requête d’autorisation poussée
</div>

Pour effectuer une requête à l’endpoint `/authorize` avec une requête d’autorisation poussée :

1. Envoyez le JAR à l’endpoint `/oauth/par` au moyen d’une requête `POST` sur le back-channel.
2. Auth0 renverra un `request_uri`, que vous pourrez ensuite utiliser pour effectuer une requête à l’endpoint `/authorize`, comme dans un [flux PAR standard](/docs/fr-ca/get-started/authentication-and-authorization-flow/authorization-code-flow/authorization-code-flow-with-par).

La requête cURL suivante utilise PAR et JAR conjointement :

```bash lines theme={null}
curl --location 'https://{YOUR_DOMAIN}.auth0.com/oauth/par' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'client_id={YOUR_CLIENT_ID}' \
--data-urlencode 'client_secret={YOUR_CLIENT_SECRET}' \
--data-urlencode 'request={JWT}'
```

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

* [Configurer les requêtes d’autorisation sécurisées par JWT (JAR)](/docs/fr-ca/get-started/applications/configure-jar)
