Generador PKCE

Generar code_verifier y code_challenge PKCE para OAuth 2.0

info

PKCE para OAuth 2.0 / OIDC

PKCE (Proof Key for Code Exchange) se usa en los flujos de código de autorización OAuth 2.0 / OIDC para asegurar el intercambio, especialmente para clientes públicos como SPA o aplicaciones móviles.
Método de challenge
128 caracteres
43 128
data_object

Uso en un flujo OAuth

GET /authorize? response_type=code& client_id=...& code_challenge=......& code_challenge_method=S256
POST /token grant_type=authorization_code& code=...& client_id=...& code_verifier=......
Entendiendo PKCE (Proof Key for Code Exchange)
TL;DR

PKCE (pronunciado 'pixy') es una extension de seguridad para el flujo de Authorization Code de OAuth 2.0. Previene ataques de interceptacion del codigo de autorizacion vinculando la solicitud de autorizacion a la solicitud de token mediante un par criptografico de code verifier y challenge.

Que es PKCE?

PKCE (Proof Key for Code Exchange, RFC 7636) es un mecanismo de seguridad disenado para proteger el flujo de Authorization Code de OAuth 2.0 contra ataques de interceptacion del codigo de autorizacion. Es especialmente critico para clientes publicos — aplicaciones como apps moviles y aplicaciones de una sola pagina que no pueden almacenar de forma segura un secreto de cliente.

Sin PKCE, una aplicacion maliciosa en el mismo dispositivo podria interceptar el codigo de autorizacion devuelto por el proveedor de identidad e intercambiarlo por un token de acceso. PKCE previene esto asegurando que solo la aplicacion que inicio la solicitud de autorizacion pueda completar el intercambio del token.

Como funciona PKCE

El flujo PKCE agrega dos parametros al flujo estandar de Authorization Code:

1. Antes de la solicitud de autorizacion

El cliente genera una cadena aleatoria llamada code_verifier (43-128 caracteres, usando caracteres URI no reservados). Luego deriva un code_challenge a partir de ella:

  • Metodo S256: code_challenge = BASE64URL(SHA256(code_verifier))
  • Metodo plain: code_challenge = code_verifier (no recomendado)

2. Solicitud de autorizacion

El cliente envia el code_challenge y code_challenge_method (S256 o plain) al servidor de autorizacion junto con los parametros estandar de la solicitud de autorizacion.

3. Solicitud de token

Despues de recibir el codigo de autorizacion, el cliente envia el code_verifier original (no el challenge) al endpoint de token. El servidor calcula el challenge a partir del verifier y lo compara con el recibido durante la autorizacion. Si coinciden, se emite el token.

Esto asegura que incluso si un atacante intercepta el codigo de autorizacion, no pueda intercambiarlo sin el code_verifier original.

Requisitos del code verifier

PropiedadRequisito
Longitud43 a 128 caracteres
Conjunto de caracteres[A-Z], [a-z], [0-9], -, ., _, ~
EntropiaDebe ser criptograficamente aleatorio

Casos de uso comunes

  • Aplicaciones de una sola pagina (SPA): Las apps JavaScript ejecutadas en el navegador no pueden ocultar un client_secret, lo que hace PKCE esencial
  • Aplicaciones moviles: Las apps nativas en iOS y Android usan PKCE con esquemas de URL personalizados o universal links
  • Herramientas CLI: Las aplicaciones de linea de comandos que usan el flujo de Authorization Code se benefician de PKCE para un intercambio de tokens seguro
  • Clientes confidenciales: Incluso las apps del lado del servidor deberian usar PKCE como defensa en profundidad segun las recomendaciones de OAuth 2.1

Prueba estos ejemplos

Generar nuevo par PKCE Válido

Haz clic para generar un par fresco de code_verifier y code_challenge usando el metodo recomendado S256.

generate
Metodo plain (no recomendado) Inválido

El metodo plain envia el verifier tal cual sin aplicar hash, lo cual es menos seguro. Usa S256 siempre que sea posible.

plain

Flujo OIDC Authorization Code con PKCE

Paso 1 de 8
language Agente de Usuario
devices Cliente (SPA)
lock Servidor de Autorización
dns Servidor de Recursos
code_verifier = "dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk"
SHA256(code_verifier)
code_challenge = "E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM"
code_challenge_method = "S256"
1

Generación PKCE

La aplicación cliente genera una cadena aleatoria criptográficamente segura llamada code_verifier (43-128 caracteres, URL-safe). Luego calcula el code_challenge aplicando un hash SHA-256 y codificación base64url al verifier. El verifier se almacena de forma segura en memoria — se necesitará más adelante para probar la identidad del cliente. Este es el núcleo de PKCE: incluso si un atacante intercepta el código de autorización, no puede intercambiarlo sin el verifier original.

Paso 1 de 8