¿Qué es jwt?

JSON Web Token (JWT)

Un JSON Web Token (JWT) es un estándar de la industria (RFC 7519) que define una forma compacta y autónoma de transmitir información de forma segura entre las partes como un objeto JSON. Esta información puede ser verificada y de confianza porque está firmada digitalmente. Los JWTs pueden ser firmados usando un secreto (con el algoritmo HMAC) o usando un par de claves pública/privada usando RSA o ECDSA.

Usos Comunes:

  • Autorización: Este es el escenario más común para usar JWT. Una vez que el usuario se ha autenticado, cada solicitud subsiguiente incluirá el JWT, permitiendo que el usuario acceda a rutas, servicios y recursos que están permitidos con ese token. El Single Sign On (SSO) es una característica que usa ampliamente JWT hoy en día, debido a su pequeña sobrecarga y a su facilidad de uso en diferentes dominios.

  • Intercambio de Información: Los JWTs son una buena forma de transmitir información de forma segura entre las partes. Dado que los JWTs pueden ser firmados, por ejemplo, usando pares de claves pública/privada, puedes estar seguro de que los emisores son quienes dicen ser. Además, como la firma se calcula usando el encabezado y la carga útil, también puedes verificar que el contenido no haya sido manipulado.

Estructura de un JWT:

Un JWT se compone de tres partes separadas por puntos (.):

  1. Encabezado (Header): Contiene información sobre el tipo de token (JWT) y el algoritmo de firma utilizado (e.g., HMAC SHA256 o RSA). Codificado en Base64URL.

  2. Carga Útil (Payload): Contiene las "reclamaciones" (claims). Las reclamaciones son declaraciones sobre una entidad (generalmente el usuario) y metadatos adicionales. Hay tres tipos de reclamaciones: registradas, públicas y privadas. Codificado en Base64URL.

  3. Firma (Signature): La firma se utiliza para verificar que el remitente del JWT es quien dice ser y para asegurarse de que el mensaje no haya sido modificado en el camino. Se calcula tomando el encabezado codificado en Base64URL, la carga útil codificada en Base64URL, un secreto, el algoritmo especificado en el encabezado y se firma. Codificado en Base64URL.

Ejemplo:

xxxxx.yyyyy.zzzzz

Donde:

  • xxxxx es el encabezado codificado en Base64URL.
  • yyyyy es la carga útil codificada en Base64URL.
  • zzzzz es la firma codificada en Base64URL.

Ventajas de usar JWT:

  • Autocontenido: La información necesaria está contenida en el propio token.
  • Escalabilidad: No requiere almacenamiento en el servidor, lo que mejora la escalabilidad.
  • Portabilidad: Puede ser utilizado en diferentes dominios y plataformas.

Consideraciones de seguridad:

  • No almacenar información sensible: Evitar almacenar información confidencial directamente en la carga útil.
  • Mantener el secreto seguro: En caso de usar HMAC, mantener el secreto del servidor a salvo es crítico.
  • Validar la firma: Siempre verificar la firma del token antes de confiar en la información contenida en él.
  • Utilizar TLS/SSL: Proteger la transmisión del token con HTTPS.
  • Rotación de claves: Cambiar las claves de firma periódicamente.
  • Tiempo de expiración (Expiration Time): Establecer un tiempo de expiración razonable para los tokens.

En resumen, los JWT son una herramienta poderosa para la autenticación y el intercambio de información segura en aplicaciones web y APIs. Sin embargo, es crucial comprender los conceptos de seguridad y seguir las mejores prácticas para evitar vulnerabilidades.