Loading
_ DESCIFRANDO CONEXIÓN SEGURA...

Anatomía de un JWT

5 tareas · 40 min · Principiante

Un token firmado es la forma habitual en que una API se entera de quién llama sin volver a pedirle la contraseña. Se ve como una cadena opaca, pero tiene tres partes con una función cada una, y la confusión más repetida es creer que «firmado» quiere decir «secreto». Aquí lees cinco tokens de Mensajería Pico Verde ya decodificados por el área de TI y aprendes a separar lo que el token dice, lo que la firma garantiza y lo que nunca debió ir dentro.

0 de 5 · 0%

Objetivo de la sala

Un token firmado es la forma habitual en que una API se entera de quién llama sin volver a pedirle la contraseña. Se ve como una cadena opaca, pero tiene tres partes con una función cada una, y la confusión más repetida es creer que «firmado» quiere decir «secreto». Aquí lees cinco tokens de Mensajería Pico Verde ya decodificados por el área de TI y aprendes a separar lo que el token dice, lo que la firma garantiza y lo que nunca debió ir dentro.

Un JWT (JSON Web Token, RFC 7519) firmado en su forma habitual consta de tres partes separadas por puntos: la cabecera, la carga y la firma. La cabecera dice cómo se firmó (el algoritmo, alg; el tipo, typ; y qué clave, kid). La carga lleva las afirmaciones, llamadas claims: quién emitió el token (iss), de quién es (sub), para qué API (aud), cuándo se emitió (iat), cuándo caduca (exp) y lo que se le permite (aquí, scope). La firma resulta de aplicar la clave del emisor a la cabecera y la carga.

Cada parte se escribe en base64url, y eso solo es una forma de escribir bytes: cualquiera que tenga el token puede leer la cabecera y la carga sin ninguna clave. Lo que la firma aporta no es secreto sino detección: si alguien cambia una letra de la carga, la firma deja de cuadrar al verificarla. Abre la tabla de partes y compara quién puede leer cada una con quién puede alterarla sin que se note.

Responde para continuar

Un desarrollador dice que el contenido de un JWT firmado «va protegido porque está firmado». ¿Qué es cierto de la carga?

Ver pista de ayuda

Mira las columnas «quien_puede_leerla» y «se_puede_alterar_sin_que_se_note» de la tabla de partes.

El claim exp marca el instante, en segundos desde 1970, a partir del cual el token ya no debe aceptarse; iat marca cuándo se emitió. Un token de acceso se diseña para vivir poco: si se filtra, el daño tiene fecha de caducidad. Una API de envíos con tokens de acceso de unos quince minutos tiene un margen de exposición razonable.

Compara en la tabla de tokens la distancia entre emisión y caducidad de cada uno. Cuatro siguen el patrón de la API. Uno se sale de él, y es el que más conviene preguntar a su dueño antes de dar nada por bueno.

Responde para continuar

¿Qué referencia de token tiene la vida más larga de las cinco? Escríbela tal cual.

Ver pista de ayuda

Resta iat a exp en cada fila y quédate con la diferencia mayor.

Los tiempos de un JWT son enteros en segundos, así que medir una vida es una resta. Para saber si una cifra es mucho o poco, conviene convertirla: 3600 segundos son una hora; 86400, un día. Un token de servicio que dure semanas deja una ventana enorme si se copia de un registro o de una copia de seguridad.

Calcula la vida, en segundos, del token que aislaste en la tarea anterior.

Responde para continuar

¿Cuántos segundos de vida tiene ese token? Escribe solo el número.

Ver pista de ayuda

Resta el valor de iat al de exp de la fila del token de vida más larga.

El claim aud (audiencia) nombra la API para la que se emitió el token. Un token no es una llave maestra: es un permiso para un destino concreto, y cada API debe rechazar los que traigan otra audiencia. Eso solo funciona si el claim está correctamente puesto desde el emisor, así que auditarlo empieza por leerlo.

Busca en la tabla el token del usuario usr-2290 y lee a qué API está dirigido.

Responde para continuar

¿Qué valor de `aud` lleva el token del usuario usr-2290? Escríbelo tal cual.

Ver pista de ayuda

Es la columna «aud» de la fila cuyo sub es usr-2290.

Como la carga la lee cualquiera que tenga el token, y los tokens acaban en cabeceras, registros de acceso, historiales del navegador y capturas de soporte, no es sitio para datos personales ni para nada confidencial. Si hace falta transportar datos que deban ir ocultos, el estándar tiene una variante cifrada (JWE), pero lo más prudente es llevar solo un identificador y consultar el dato en el servidor.

En la tabla de cargas con datos extra, el token TK-0830 lleva un correo y una dirección de entrega de un cliente.

Responde para continuar

Un token lleva en su carga el correo y la dirección de un cliente. ¿Cómo se registra el hallazgo?

Ver pista de ayuda

Recuerda quién puede leer la carga y por dónde viaja un token.

Inicia sesión para registrar tus puntos y progreso en el ranking.

Whoami-Labs Pro

Whoami-Labs Pro utiliza cookies

Utilizamos cookies y almacenamiento local para el funcionamiento del sitio, seguridad de sesión y, si lo autorizas, analítica y marketing. Puedes aceptar, rechazar o personalizar. Política de Privacidad