Estructura de JWT Explicada: Header, Payload y Signature
En el desarrollo web moderno, asegurar la comunicación entre clientes y servidores es fundamental. Los JSON Web Tokens (JWT) se han convertido en el estándar de la industria para representar reclamaciones de forma segura entre dos partes. Comprender cómo funcionan es esencial para implementar sistemas de autenticación robustos.
¿Qué es un JSON Web Token (JWT)?
Un JWT es un estándar abierto (RFC 7519) que define una forma compacta y autónoma de transmitir información 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 (HMAC) o un par de claves pública/privada (RSA o ECDSA).
Las tres partes de un JWT
Un JWT consta de tres partes separadas por puntos (.):
- Header (Encabezado): Contiene el tipo de token y el algoritmo de firma.
- Payload (Carga útil): Contiene los datos o reclamaciones (claims) del usuario.
- Signature (Firma): Permite verificar que el token no ha sido alterado.
Si desea inspeccionar el contenido de un token real, puede utilizar nuestro JWT Decoder.
Parte 1: El Header
El encabezado normalmente indica el algoritmo utilizado (como HS256) y el tipo de token (JWT). Luego se codifica en Base64Url.
{
"alg": "HS256",
"typ": "JWT"
}
Parte 2: El Payload
Contiene las reclamaciones. Estas pueden ser registradas (como sub para el ID del usuario o exp para la expiración), públicas o privadas. Al igual que el encabezado, se codifica en Base64Url.
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
Parte 3: La Firma
Para crear la firma, se toma el encabezado codificado, la carga útil codificada, un secreto y el algoritmo especificado. Esto garantiza que el contenido no ha sido modificado.
Cómo funciona la autenticación con JWT
El flujo típico es el siguiente:
- El usuario inicia sesión con sus credenciales.
- El servidor genera un JWT firmado y lo envía al cliente.
- El cliente almacena el token (por ejemplo, en
localStorageo cookies). - En cada petición posterior, el cliente envía el token en el encabezado
Authorization: Bearer <token>. - El servidor verifica la firma y concede el acceso si es válido.
Seguridad: No guarde secretos en el JWT
Es vital recordar que los JWT no están encriptados por defecto; solo están codificados. Cualquiera que intercepte el token puede leer el Payload. Por lo tanto, nunca guarde contraseñas ni datos sensibles en él. Para generar secretos fuertes para sus firmas, puede usar nuestro Password Generator.
Comparativa: HS256 vs RS256
| Algoritmo | Tipo | Uso ideal |
|---|---|---|
| HS256 | Simétrico (1 clave) | Aplicaciones internas |
| RS256 | Asimétrico (2 claves) | Microservicios y APIs públicas |
Conclusión
Los JWT son una herramienta poderosa para la escalabilidad y la seguridad en la web. Al comprender su estructura de tres partes, los desarrolladores pueden tomar mejores decisiones arquitectónicas y proteger sus aplicaciones de manera más efectiva.