Generador PKCE
Generar code_verifier y code_challenge PKCE para OAuth 2.0
PKCE para OAuth 2.0 / OIDC
Uso en un flujo OAuth
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
| Propiedad | Requisito |
|---|---|
| Longitud | 43 a 128 caracteres |
| Conjunto de caracteres | [A-Z], [a-z], [0-9], -, ., _, ~ |
| Entropia | Debe 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
Haz clic para generar un par fresco de code_verifier y code_challenge usando el metodo recomendado S256.
generate 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 8code_verifier = "dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk"SHA256(code_verifier)code_challenge = "E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM"code_challenge_method = "S256"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.