JWT (JSON Web Token, RFC 7519) es el formato de token más extendido en autenticación web moderna. Este decodificador JWT descompone al instante header, payload y firma para que puedas inspeccionar claims como sub, exp, iat, iss o aud sin escribir una sola línea de código. Todo se procesa en tu navegador: nada de servidores intermedios, nada de logs, seguro incluso con tokens de staging.
Estructura de un JWT
Un JWT es una cadena con tres partes separadas por puntos: header.payload.firma. Header y payload son JSON codificado en Base64URL (variante URL-safe de Base64); la firma es HMAC-SHA256 o RSA/ECDSA. El header declara el algoritmo (`alg`) y el tipo (`typ: JWT`). El payload contiene los claims. La firma garantiza que nadie ha modificado los dos primeros bloques.
Claims estándar (registered claims)
RFC 7519 define claims comunes: `iss` (emisor), `sub` (sujeto/usuario), `aud` (audiencia), `exp` (expiración Unix), `nbf` (not before), `iat` (issued at), `jti` (ID único). Verificar `exp` y `aud` es imprescindible en el backend: aceptar tokens caducados o dirigidos a otra API es una vulnerabilidad crítica.
Verificación de firma vs decodificación
Este decodificador NO verifica la firma: sólo lee las tres partes. Para verificar necesitas la clave secreta (HS*) o pública (RS*/ES*). Nunca aceptes un JWT en tu backend sin verificar firma y expiración. Bibliotecas como jsonwebtoken (Node), pyjwt (Python) o jose (Java) hacen ambas cosas.
Vulnerabilidades comunes en JWT
Los ataques históricos más famosos son: `alg: none` (algunos parsers antiguos aceptaban tokens sin firma), confusión de algoritmos (firmar HS256 con la clave pública RS256), y tokens sin expiración. Usa siempre exp corto (15 min), refresh tokens rotativos y una whitelist explícita de algoritmos aceptados en tu backend.
Casos de uso comunes
- Depurar por qué una API devuelve 401 aunque el usuario esté logueado.
- Ver qué claims incluye tu proveedor OAuth (Google, Auth0, Okta).
- Comprobar la expiración de un token antes de reportar un incidente.
- Formación: enseñar a nuevos devs cómo funciona OAuth y OpenID Connect.
Buenas prácticas
- Expiraciones cortas para access tokens (5-15 minutos), largas sólo para refresh tokens.
- No pongas datos sensibles en el payload: es legible por cualquiera con el token.
- Verifica siempre alg, iss, aud y exp en el backend.
- Usa una lista de revocación (o cache Redis con TTL) para invalidar tokens comprometidos.