OAuth 2.0 y OpenID Connect, paso a paso
Vas a hacer un inicio de sesión real contra un servidor de autorización de laboratorio. En cada paso verás la petición exacta, lo que responde el servidor y por qué. Y podrás romperlo a propósito para ver cómo se defiende.
/as/* en este mismo dominio-
1
La aplicación prepara la petición
Antes de mandarte a iniciar sesión, la aplicación genera tres valores aleatorios y los guarda:
state(contra CSRF),nonce(contra reutilizar un id_token) y elcode_verifierde PKCE. Al servidor solo le envía el hash del verifier: elcode_challenge.Petición de autorización
-
2
Vuelves con un código
El servidor te redirige de vuelta con un
codede un solo uso y el mismostate. La aplicación comprueba que elstatees el que guardó: si no coincide, la respuesta no la ha iniciado ella y la descarta. -
3
Canjear el código por tokens
La aplicación envía el código junto con el
code_verifieroriginal. El servidor calcula su SHA-256 y lo compara con elcode_challengedel paso 1. Así, aunque alguien robara el código, no podría canjearlo.Petición
Respuesta
—
-
4
Inspeccionar y validar los tokens
Un JWT son tres partes en base64url: cabecera, datos y firma. Cualquiera puede leerlo; solo el servidor puede firmarlo. La aplicación valida el
id_tokencon la clave pública del servidor (JWKS).Cabecera
Datos (claims)
Validación
-
5
Usar el access_token
El
access_tokenes la llave para llamar a APIs. Elid_tokensolo sirve para que la aplicación sepa quién eres: no debe usarse para llamar a una API, y este servidor lo rechaza.—
Lo que este laboratorio simplifica
- Los usuarios son de prueba y no se pide contraseña: el foco está en el protocolo, no en la autenticación. El segundo factor (MFA) se simula con una casilla.
- El código de autorización es un JWT firmado y sin estado, válido 60 segundos. Un servidor real lo guarda y lo invalida al primer uso, para impedir que se canjee dos veces.
- Los tokens se guardan en
sessionStoragepara poder mostrarlos. En una aplicación real se evita exponerlos así (por ejemplo, con un backend-for-frontend).
Configuración pública del servidor: /.well-known/openid-configuration · /as/jwks