Generador de PKCE code_verifier y code_challenge

Genera o pega un code_verifier y obtén el code_challenge S256 para OAuth 2.0 PKCE (RFC 7636).

code_challenge (S256)

Funciona por completo en tu navegador. Nada de lo que escribes se envía ni se guarda.

Cómo usar

  1. Pulsa Generar para un code_verifier nuevo o pega el tuyo.
  2. El code_challenge se calcula como BASE64URL(SHA-256(code_verifier)).
  3. Envía code_challenge y code_challenge_method=S256 en la solicitud de autorización.
  4. Envía el code_verifier en la solicitud de token.

PKCE (Proof Key for Code Exchange, RFC 7636) protege el flujo de código de autorización de OAuth 2.0. Se creó para clientes públicos, como apps móviles, apps de escritorio y aplicaciones de una sola página, que no pueden guardar un secreto de cliente. Antes de redirigir al usuario, el cliente crea un secreto de un solo uso, el code_verifier, y envía solo su hash, el code_challenge. Al canjear el código por tokens envía el verifier original y el servidor comprueba que coincidan, así que quien intercepte solo el código no puede usarlo.

Este generador toma 32 bytes aleatorios de crypto.getRandomValues del navegador y los codifica en base64url sin relleno, lo que da un verifier de 43 caracteres. El code_challenge es el SHA-256 del verifier, también en base64url sin relleno, y siempre mide 43 caracteres. Solo se ofrece el método S256: RFC 7636 define también plain, pero exige S256 cuando el cliente puede calcular SHA-256. Sirve para depurar una integración de inicio de sesión, comparar la salida de tu biblioteca o preparar peticiones de prueba a mano.

Un verifier pegado se procesa tal cual, sin validar su formato: comprueba que tenga entre 43 y 128 caracteres de A–Z, a–z, 0–9, «-», «.», «_» y «~». Genera un verifier nuevo para cada solicitud de autorización. Ambos valores se calculan en esta página con la Web Crypto API y no se envían a ningún sitio.

Preguntas frecuentes

¿Qué es PKCE?

Proof Key for Code Exchange (RFC 7636). El cliente envía un code_challenge con hash en la autorización y el code_verifier original al pedir el token, así un código robado no sirve por sí solo.

¿Cómo se calcula el code_challenge?

Con S256: SHA-256 del code_verifier en ASCII, codificado en base64url sin relleno. Para el ejemplo de RFC 7636 dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk el resultado es E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM.

¿Por qué el verifier generado tiene 43 caracteres?

32 bytes aleatorios en base64url sin relleno son 43 caracteres, la longitud mínima que permite RFC 7636 (de 43 a 128 caracteres de A-Z, a-z, 0-9, -, ., _, ~).

Herramientas relacionadas