¿Qué es un JSON Web Token (JWT)?
Un JSON Web Token (JWT) es un estándar abierto (RFC 7519) que define una forma compacta y autónoma de transmitir información de manera segura entre partes como un objeto JSON. Esta información puede ser verificada y confiable porque está firmada digitalmente. Los JWT pueden firmarse usando un secreto (con el algoritmo HMAC) o un par de claves pública/privada usando RSA o ECDSA.
Estructura de un JWT
Los JWT constan de tres partes separadas por puntos (.). Cuando ves un token, se ve así: xxxxx.yyyyy.zzzzz.
- Encabezado: Generalmente consta de dos partes: el tipo de token, que es JWT, y el algoritmo de firma que se utiliza, como HMAC SHA256 o RSA. Está codificado en Base64Url.
- Payload: Contiene los claims. Los claims son declaraciones sobre una entidad (generalmente, el usuario) y datos adicionales (como rol, ID de usuario, correo electrónico y tiempo de expiración `exp`). También está codificado en Base64Url.
- Firma: Para crear la parte de la firma, debes tomar el encabezado codificado, el payload codificado, un secreto, el algoritmo especificado en el encabezado y firmar eso. Esto asegura que el token no haya sido alterado en tránsito.
El peligro de los decodificadores JWT en línea
Los JWT son increíblemente sensibles. Si un actor malicioso intercepta un JWT válido perteneciente a un usuario administrador, puede secuestrar fácilmente la sesión de ese usuario y acceder a sistemas privados. Nunca debes pegar JWT de producción en herramientas en línea aleatorias. Muchos decodificadores en línea envían silenciosamente tu token pegado a un servidor backend para registro, análisis o algo peor.
Nuestra herramienta es diferente. Escribimos este decodificador usando JavaScript puro del lado del frontend. El proceso de decodificación (simplemente analizar las cadenas Base64) ocurre completamente dentro de la memoria de tu navegador web. Intenta desconectarte de internet y pegar tu token; aún se decodificará perfectamente, demostrando que tus datos nunca abandonan tu máquina.
¿Están cifrados los JWT?
Una idea errónea común entre los desarrolladores junior es que los JWT están cifrados y ocultan los datos dentro del payload. No lo están. Los JWT estándar (JWS) simplemente están codificados (Base64Url) y firmados criptográficamente. Cualquiera que intercepte el token puede decodificarlo (usando una herramienta como esta) y leer los claims. Por lo tanto, nunca debes poner contraseñas, números de tarjeta de crédito o secretos de API dentro del payload.