¿Qué es un JWT?+
Un JSON Web Token (RFC 7519) es una forma compacta de pasar claims entre dos partes: tres segmentos base64url unidos por puntos. La cabecera indica el algoritmo, la carga útil contiene los claims (de quién trata el token, quién lo emitió, para quién es y cuándo expira) y la firma permite al receptor comprobar que las dos primeras partes las produjo alguien con la clave correcta y que no se han modificado. Los JWT se usan sobre todo como tokens de acceso OAuth y como tokens de ID de OpenID Connect.
¿Cómo decodifico un JWT?+
Divídelo por los puntos, decodifica en base64url los dos primeros segmentos y analiza cada resultado como JSON. Eso es todo lo que es decodificar, y por eso no hace falta ninguna clave. Pega un token en el cuadro de arriba y ocurre mientras escribes. base64url es Base64 normal con guion y guion bajo en lugar de más y barra, y sin los signos igual del final, así que en un decodificador Base64 estándar primero hay que volver a cambiar esos dos caracteres.
¿Es seguro decodificar un JWT online?+
Solo en una página que lo decodifique localmente. Un JWT es una credencial al portador: quien tenga uno sin expirar normalmente puede usarlo. Esta página decodifica y verifica en tu navegador y nunca envía el token a ninguna parte, y puedes comprobarlo tú mismo abriendo la pestaña Red de las herramientas para desarrolladores de tu navegador antes de pegarlo. Aun así, usa tokens expirados o de prueba cuando puedas, y nunca pegues un secreto de firma de producción ni una clave privada en un sitio que no puedas inspeccionar.
¿Cualquiera puede leer la carga útil de un JWT?+
Sí. Un JWT firmado está codificado, no cifrado. base64url es una codificación de texto reversible y sin clave, así que cualquiera que vea el token puede leer todos sus claims. Nunca pongas en la carga útil de un JWT contraseñas, claves de API ni datos personales que no le mostrarías a cualquiera que tenga el token. Si los claims deben seguir siendo privados, el token tiene que ser un JWE, que está cifrado.
¿Qué significan exp, iat y nbf?+
Son valores NumericDate: segundos enteros o fraccionarios desde 1970-01-01 00:00:00 UTC, no milisegundos. exp es el momento a partir del cual el token debe rechazarse, nbf el momento antes del cual debe rechazarse e iat el momento en que se emitió. Por ejemplo, exp 1767225600 es 2026-01-01 00:00:00 UTC. Muchos verificadores admiten un pequeño desfase de reloj, normalmente de entre cero y cinco minutos. Un valor de 13 dígitos es casi siempre una marca de tiempo en milisegundos escrita por error, y esta página lo señala.
¿Qué diferencia hay entre HS256 y RS256?+
HS256 es HMAC con SHA-256. Un único secreto compartido firma y verifica, así que cualquier servicio que pueda comprobar un token también puede crear uno. RS256 es una firma RSA con SHA-256. El emisor firma con una clave privada y cualquiera verifica con la clave pública, que los proveedores suelen publicar como un conjunto JWK. HS256 conviene a un único sistema que emite y comprueba sus propios tokens; RS256, ES256 o EdDSA convienen a tokens que cruzan una frontera de confianza, como un proveedor de identidad y muchas API.
¿Por qué es peligroso alg none?+
alg none marca un JWT no protegido: el segmento de firma está vacío, así que cualquiera puede escribir los claims que quiera. La especificación permite estos tokens, pero a un verificador que los acepte, o que deje que la propia cabecera del token decida qué algoritmo usar, se le puede colar un token falsificado. Configura tu biblioteca JWT con los algoritmos exactos que esperas y rechaza todo lo demás, incluido none.
¿Cómo verifico la firma de un JWT?+
Recalcúlala o compruébala sobre los dos primeros segmentos exactamente como aparecen en el token (la cabecera, un punto y luego la carga útil) usando la clave correcta. Para HS256 esa clave es el secreto compartido; para RS256, PS256, ES256 o EdDSA es la clave pública del emisor, que suele estar en el jwks_uri indicado en el documento /.well-known/openid-configuration del proveedor. Pega cualquiera de las dos en el verificador de arriba. Un verificador real comprueba además exp, nbf, iss y aud, porque una firma válida solo prueba quién creó el token, no que siga siendo aceptable.
¿Debo usar un JWT o una cookie de sesión?+
Una cookie de sesión clásica contiene un ID aleatorio que el servidor busca en su propio almacén, así que cerrar sesión o revocar el acceso surte efecto de inmediato. Un JWT lleva consigo sus claims, así que cualquier servicio que tenga la clave puede comprobarlo sin hacer ninguna búsqueda, pero sigue siendo válido hasta exp incluso después de que el usuario cierre sesión, a menos que añadas una lista de bloqueo. Muchos sitios usan JWT de vida corta entre servicios y una sesión del lado del servidor para el navegador. Las dos opciones no son excluyentes: un JWT también puede guardarse en una cookie.
¿Qué es un JWE?+
Un token JSON Web Encryption (RFC 7516) está cifrado en lugar de solo firmado. Su forma compacta tiene cinco segmentos: cabecera protegida, clave cifrada, vector de inicialización, texto cifrado y etiqueta de autenticación. Solo la cabecera es legible; los claims están dentro del texto cifrado y hace falta la clave privada o la clave compartida del destinatario para descifrarlos. Esta página reconoce un JWE, muestra su cabecera y dice claramente que los claims no se pueden leer sin la clave.