Générateur PKCE code_verifier et code_challenge

Générez ou collez un code_verifier et obtenez le code_challenge S256 pour OAuth 2.0 PKCE (RFC 7636).

code_challenge (S256)

Fonctionne entièrement dans votre navigateur. Rien n’est envoyé ni stocké.

Mode d’emploi

  1. Cliquez sur Générer pour un nouveau code_verifier, ou collez le vôtre.
  2. Le code_challenge est calculé comme BASE64URL(SHA-256(code_verifier)).
  3. Envoyez code_challenge et code_challenge_method=S256 dans la requête d’autorisation.
  4. Envoyez le code_verifier dans la requête de jeton.

PKCE (Proof Key for Code Exchange, RFC 7636) protège le flux « authorization code » d’OAuth 2.0. Il a été conçu pour les clients publics, comme les applications mobiles, de bureau ou monopage, qui ne peuvent pas garder un secret client. Avant la redirection, le client crée un secret à usage unique, le code_verifier, et n’envoie que son empreinte, le code_challenge. Lors de l’échange du code contre des jetons, il envoie le verifier d’origine et le serveur vérifie la correspondance : intercepter le code seul ne suffit donc pas.

Ce générateur tire 32 octets aléatoires avec crypto.getRandomValues du navigateur et les encode en base64url sans remplissage, ce qui donne un verifier de 43 caractères. Le code_challenge est le SHA-256 du verifier, lui aussi en base64url sans remplissage, et fait toujours 43 caractères. Seule la méthode S256 est proposée : la RFC 7636 définit aussi plain, mais impose S256 dès que le client sait calculer un SHA-256. Pratique pour déboguer une intégration de connexion, comparer la sortie de votre bibliothèque ou préparer des requêtes de test.

Un verifier collé est haché tel quel, sans contrôle de format : vérifiez qu’il compte de 43 à 128 caractères parmi A–Z, a–z, 0–9, « - », « . », « _ » et « ~ ». Créez un nouveau verifier pour chaque demande d’autorisation. Les deux valeurs sont calculées sur cette page avec la Web Crypto API et ne sont envoyées nulle part.

Questions fréquentes

Qu’est-ce que PKCE ?

Proof Key for Code Exchange (RFC 7636). Le client envoie un code_challenge haché lors de l’autorisation et le code_verifier d’origine lors de la demande de jeton : un code d’autorisation volé ne suffit pas.

Comment le code_challenge est-il calculé ?

Avec S256 : SHA-256 du code_verifier en ASCII, puis encodage base64url sans remplissage. Pour l’exemple de la RFC 7636 dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk, le résultat est E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM.

Pourquoi le verifier généré fait-il 43 caractères ?

32 octets aléatoires en base64url sans remplissage font 43 caractères, la longueur minimale autorisée par la RFC 7636 (43 à 128 caractères parmi A-Z, a-z, 0-9, -, ., _, ~).

Outils similaires