Un JSON Web Token (JWT) es un estándar abierto (RFC 7519) para representar afirmaciones de forma segura entre dos partes, como por ejemplo, un cliente y un servidor. Un JWT se compone de tres partes: el encabezado, el cuerpo y la firma. Cada una de estas partes se codifica en formato Base64 URL y se separan por un punto (“.”) para formar el JWT completo.
A continuación, te explicaré en detalle cada una de las partes de un JWT:
- Encabezado (Header): La primera parte de un JWT es el encabezado, que se utiliza para especificar el tipo de token (JWT) y el algoritmo de cifrado utilizado para firmar el token. Un ejemplo de encabezado puede ser el siguiente:
{
"alg": "HS256",
"typ": "JWT"
}
En este ejemplo, estamos especificando que el algoritmo de cifrado utilizado para firmar el token es HMAC SHA-256 (“alg”: “HS256”) y que el tipo de token es JWT (“typ”: “JWT”).
- Cuerpo (Payload): La segunda parte de un JWT es el cuerpo, que contiene los datos del usuario y las afirmaciones que se quieren transmitir. El cuerpo puede contener cualquier información que se desee, pero existen algunas afirmaciones predefinidas que se utilizan comúnmente, como por ejemplo:
- “sub” (subject): identifica el sujeto del JWT (por ejemplo, el ID del usuario).
- “iss” (issuer): identifica quién emitió el JWT.
- “aud” (audience): identifica quién es el destinatario del JWT.
- “exp” (expiration time): indica la fecha de expiración del token.
- “iat” (issued at): indica la fecha de emisión del token.
Un ejemplo de cuerpo puede ser el siguiente:
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
En este ejemplo, estamos especificando que el sujeto del JWT es el usuario con ID “1234567890”, que el nombre del usuario es “John Doe” y que el token fue emitido el 18 de enero de 2018 a las 11:17:02 (hora Unix).
- Firma (Signature): La tercera parte de un JWT es la firma, que se utiliza para verificar que el token no ha sido manipulado y que es seguro de usar. La firma se crea a partir del encabezado, el cuerpo y una clave secreta compartida entre el cliente y el servidor. La clave secreta se utiliza para firmar el token utilizando el algoritmo especificado en el encabezado.
La firma se crea concatenando el encabezado y el cuerpo del token, separados por un punto (“.”) y se cifran utilizando la clave secreta y el algoritmo especificado en el encabezado. Un ejemplo de firma puede ser el siguiente:
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secretKey)
En este ejemplo, estamos utilizando el algoritmo HMAC SHA-256 para crear la firma del token, utilizando la clave secreta “secretKey”. La firma resultante se codifica en Base64 URL y se agrega al JWT completo.
En resumen, un JWT es una forma segura de transmitir afirmaciones entre dos partes utilizando un formato compact