> ## 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écouvrez comment fonctionne le flux Authorization Code avec Proof Key for Code Exchange (PKCE) et pourquoi vous devriez l’utiliser pour les applications natives et mobiles.

# Flux Authorization Code avec Proof Key for Code Exchange (PKCE)

<Card title="Aperçu">
  Concepts clés

  * Découvrez le type d’octroi OAuth 2.0 Authorization Code Flow with Proof Key for Code Exchange (PKCE).
  * Utilisez ce type d’octroi pour les applications qui ne peuvent pas stocker de secret client, comme les applications natives ou monopage.
  * Découvrez différentes méthodes d’implémentation avec les SDK Auth0.
</Card>

Lorsque des <Tooltip tip="Application publique : application qui ne peut pas conserver des informations d’identification de façon sécurisée. Par exemple, une application native de bureau ou mobile et une application Web côté client basée sur JavaScript (comme une application monopage (SPA))." cta="Voir le glossaire" href="/fr-CA/docs/glossary?term=public+clients">applications publiques</Tooltip> (par ex., les applications natives et monopage) demandent des <Tooltip tip="Application publique : application qui ne peut pas conserver des informations d’identification de façon sécurisée. Par exemple, une application native de bureau ou mobile et une application Web côté client basée sur JavaScript (comme une application monopage (SPA))." cta="Voir le glossaire" href="/fr-CA/docs/glossary?term=access+tokens">jetons d’accès</Tooltip>, cela soulève des enjeux de sécurité supplémentaires que le seul flux Authorization Code n’atténue pas. En effet :

**Applications natives**

* Ne peuvent pas stocker de façon sécurisée un <Tooltip tip="Secret client : secret utilisé par une application pour s’authentifier auprès du serveur d’autorisation; il ne devrait être connu que de l’application et du serveur d’autorisation et doit être suffisamment aléatoire pour ne pas pouvoir être deviné." cta="Voir le glossaire" href="/fr-CA/docs/glossary?term=Client+Secret">Secret client</Tooltip>. La décompilation de l’application révélera le <Tooltip tip="Secret client : secret utilisé par une application pour s’authentifier auprès du serveur d’autorisation; il ne devrait être connu que de l’application et du serveur d’autorisation et doit être suffisamment aléatoire pour ne pas pouvoir être deviné." cta="Voir le glossaire" href="/fr-CA/docs/glossary?term=Client+Secret">Secret client</Tooltip>, qui est associé à l’application et est le même pour tous les utilisateurs et appareils.
* Sont vulnérables aux attaques d’interception et d’injection de code d’autorisation. Sans secret client, un attaquant qui intercepte le code d’autorisation peut l’échanger contre des jetons.
* Peuvent utiliser un schéma d’URL personnalisé pour intercepter les redirections (par ex., MyApp\://), ce qui pourrait permettre à des applications malveillantes de recevoir un <Tooltip tip="Code d’autorisation : chaîne aléatoire générée par le serveur d’autorisation et renvoyée à l’application dans le cadre de la réponse d’autorisation lors de l’utilisation du flux Authorization Code (avec ou sans PKCE)." cta="Voir le glossaire" href="/fr-CA/docs/glossary?term=Authorization+Code">Code d’autorisation</Tooltip> de votre <Tooltip tip="Serveur d’autorisation : serveur centralisé qui contribue à définir les limites de l’accès d’un utilisateur. Par exemple, votre serveur d’autorisation peut contrôler les données, les tâches et les fonctionnalités auxquelles un utilisateur a accès." cta="Voir le glossaire" href="/fr-CA/docs/glossary?term=Authorization+Server">serveur d’autorisation</Tooltip>. En raison de ce risque, **Auth0 déconseille fortement l’utilisation de schémas d’URI personnalisés**. Pour en savoir plus, consultez [Measures Against Application Impersonation](/fr-CA/docs/secure/security-guidance/measures-against-app-impersonation.mdx).

**Applications monopage**

* Ne peuvent pas stocker de façon sécurisée un Secret client parce que l’intégralité de leur code source est accessible dans le navigateur.

Dans ces situations, <Tooltip tip="OAuth 2.0 : cadre d’autorisation qui définit des protocoles et des flux de travail d’autorisation." cta="Voir le glossaire" href="/fr-CA/docs/glossary?term=OAuth+2.0">OAuth 2.0</Tooltip> fournit une version du flux Authorization Code qui utilise Proof Key for Code Exchange (PKCE) (définie dans [OAuth 2.0 RFC 7636](https://tools.ietf.org/html/rfc7636)).

Le flux Authorization Code amélioré par PKCE introduit un secret créé par l’application appelante qui peut être vérifié par le <Tooltip tip="Serveur d’autorisation : serveur centralisé qui contribue à définir les limites de l’accès d’un utilisateur. Par exemple, votre serveur d’autorisation peut contrôler les données, les tâches et les fonctionnalités auxquelles un utilisateur a accès." cta="Voir le glossaire" href="/fr-CA/docs/glossary?term=authorization+server">serveur d’autorisation</Tooltip>; ce secret s’appelle le Code Verifier. De plus, l’application appelante crée une valeur dérivée du Code Verifier appelée Code Challenge et envoie cette valeur par HTTPS pour récupérer un Code d’autorisation. Ainsi, un attaquant malveillant ne peut intercepter que le Code d’autorisation et ne peut pas l’échanger contre un jeton sans le Code Verifier.

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

Comme le flux Authorization Code avec PKCE s’appuie sur le [flux Authorization Code standard](/fr-CA/docs/get-started/authentication-and-authorization-flow/authorization-code-flow), les étapes sont très semblables.

<Frame>
  <img src="https://mintcdn.com/translations/3nS3prIggmJG9TUI/docs/images/cdy7uua7fh8z/3pstjSYx3YNSiJQnwKZvm5/33c941faf2e0c434a9ab1f0f3a06e13a/auth-sequence-auth-code-pkce.png?fit=max&auto=format&n=3nS3prIggmJG9TUI&q=85&s=6c413640df1409aac6572a553bae4164" alt="Flux - Authorization Code avec PKCE - diagramme de séquence d’autorisation" width="1500" height="1220" data-path="docs/images/cdy7uua7fh8z/3pstjSYx3YNSiJQnwKZvm5/33c941faf2e0c434a9ab1f0f3a06e13a/auth-sequence-auth-code-pkce.png" />
</Frame>

1. L’utilisateur clique sur **Connexion** dans l’application.
2. Le SDK d’Auth0 crée un `code_verifier` aléatoire sur le plan cryptographique et génère à partir de celui-ci un `code_challenge`.
3. Le SDK d’Auth0 redirige l’utilisateur vers le serveur d’autorisation Auth0 ([point de terminaison `/authorize`](https://auth0.com/docs/api/authentication#authorization-code-grant-pkce-)) avec le `code_challenge`.
4. Votre serveur d’autorisation Auth0 redirige l’utilisateur vers l’invite de connexion et d’autorisation.
5. L’utilisateur s’authentifie à l’aide de l’une des options de connexion configurées et peut voir une page de consentement qui énumère les autorisations qu’Auth0 accordera à l’application.
6. Votre serveur d’autorisation Auth0 stocke le `code_challenge` et redirige l’utilisateur vers l’application avec un `code` d’autorisation, valable pour une seule utilisation.
7. Le SDK d’Auth0 envoie ce `code` et le `code_verifier` (créé à l’étape 2) au serveur d’autorisation Auth0 `(`[`/oauth/token` point de terminaison](https://auth0.com/docs/api/authentication?http#authorization-code-flow-with-pkce44)).
8. Votre serveur d’autorisation Auth0 vérifie le `code_challenge` et le `code_verifier`.
9. Votre serveur d’autorisation Auth0 répond avec un jeton d’identité et un jeton d’accès (et, facultativement, un jeton d’actualisation).
10. Votre application peut utiliser le jeton d’accès pour appeler une API afin d’accéder à des renseignements sur l’utilisateur.
11. L’API renvoie les données demandées.

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Si la [rotation des Jetons d’actualisation](/fr-CA/docs/secure/tokens/refresh-tokens/refresh-token-rotation) est activée, un nouveau Jeton d’actualisation est généré à chaque requête et émis avec le Jeton d’accès. Lorsqu’un Jeton d’actualisation est échangé, le Jeton d’actualisation précédent est invalidé, mais l’information sur cette relation est conservée par le serveur d’autorisation.
</Callout>

<div id="how-to-implement-it">
  ## Comment le mettre en œuvre
</div>

La façon la plus simple de mettre en œuvre le flux Authorization Code avec PKCE est de [suivre nos guides de démarrage rapide pour applications natives](/fr-CA/docs/quickstart/native) ou [nos guides de démarrage rapide pour applications monopage](/fr-CA/docs/quickstart/spa).

Selon le type de votre application, vous pouvez aussi utiliser nos SDK mobiles ou pour applications monopage :

**Mobile**

* [SDK Auth0 Swift](/fr-CA/docs/libraries/auth0-swift)
* [SDK Auth0 Android](/fr-CA/docs/libraries/auth0-android)

**Monopage**

* [SDK Auth0 pour applications monopage](/fr-CA/docs/libraries/auth0-single-page-app-sdk)
* [SDK Auth0 React](/fr-CA/docs/libraries/auth0-react)

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Les récentes avancées en matière de protection de la vie privée dans les navigateurs nuisent à l’expérience utilisateur en empêchant l’accès aux témoins tiers; par conséquent, les flux basés sur le navigateur doivent utiliser la [rotation des jetons d’actualisation](/fr-CA/docs/secure/tokens/refresh-tokens/refresh-token-rotation), qui offre une méthode sécurisée pour utiliser des jetons d’actualisation dans les SPA tout en fournissant aux utilisateurs finaux un accès fluide aux ressources, sans les perturbations de l’expérience utilisateur causées par des technologies de protection de la vie privée des navigateurs comme ITP.
</Callout>

Vous pouvez suivre nos tutoriels pour utiliser nos points de terminaison d’API afin [d’ajouter l’ouverture de session à l’aide du flux Authorization Code avec PKCE](/fr-CA/docs/get-started/authentication-and-authorization-flow/authorization-code-flow-with-pkce/add-login-using-the-authorization-code-flow-with-pkce) ou [d’appeler votre API à l’aide du flux Authorization Code avec PKCE](/fr-CA/docs/get-started/authentication-and-authorization-flow/authorization-code-flow-with-pkce/call-your-api-using-the-authorization-code-flow-with-pkce).

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

* [Auth0 Rules](/fr-CA/docs/customize/rules)
* [Auth0 Hooks](/fr-CA/docs/customize/hooks)
* [Jetons](/fr-CA/docs/secure/tokens)
* [Bonnes pratiques relatives aux jetons](/fr-CA/docs/secure/tokens/token-best-practices)
* [Quel flux OAuth 2.0 dois-je utiliser ?](/fr-CA/docs/get-started/authentication-and-authorization-flow/which-oauth-2-0-flow-should-i-use)
