Buenas prácticas y riesgos de los JSON Web Tokens (JWT)

Clase 22 de 25Curso de OAuth 2.0 y OpenID Connect: Flujos de Autenticación y Casos de Estudio

Resumen

¿Cuándo no son convenientes los JSON Web Tokens?

Los JSON Web Tokens (JWT) son útiles, pero no siempre son la mejor opción. Aquí te explicamos cuándo deberías evitar su uso:

  • Evitar información sensible en el payload: No almacenes datos como números de teléfono o identificaciones personales, ya que los JWT pueden ser decodificados fácilmente. Datos que podrían violar normas, como el GDPR, también deben ser evitados.
  • Mantén el payload liviano: Cuanta más información incluyas, más pesado será el JWT. Esto puede complicar su almacenamiento, especialmente en cookies que tienen un límite de tamaño.
  • Tiempo de expiración corto: Si un JWT se filtra, cualquier persona podría usarlo indefinidamente. Se recomienda que el tiempo de expiración sea lo más breve posible, idealmente no más de 15 minutos.
  • Tratar los JWT como tokens opacos: No decodifiques los tokens en el lado del cliente por razones de seguridad, ya que la validación de la firma no es segura en el cliente.

¿Cuáles son las prácticas recomendadas para manejar JSON Web Tokens?

Al usar JWT, hay que tener en cuenta las siguientes recomendaciones para asegurar una implementación segura y eficaz:

  • Almacenamiento seguro: Utiliza cookies seguras del lado del servidor, especialmente si toda la aplicación pertenece al mismo dominio. Si esto no es posible, mantener los tokens en memoria es una buena alternativa.
Ejemplo de almacenamiento seguro en cookie
setCookie('token', JWTtoken, {
  httpOnly: true,
  secure: true,
  sameSite: 'Strict',
  maxAge: 60 * 15 // 15 minutos
});
  • Bloqueo de tokens filtrados: Implementa un sistema de bloqueo o "deny list" para tokens comprometidos. Asegúrate de que los tokens tengan un identificador único (claim de JTI) para facilidad de seguimiento y etiquetado en las listas de bloqueo.
  • Renovación de tokens: Considera el uso de "Refresh Tokens" o "Silent Authentication" para gestionar tokens expirados. Consulta con tu servicio de autorización para estas funcionalidades.

¿Qué hacer si las llaves de firmado se filtran?

Si las llaves de firmado de los JWT se filtran, es crucial actuar rápidamente:

  • Listas de bloqueo: Añade a la lista de bloqueo todos los tokens generados con las llaves comprometidas.
  • Rotación de llaves: Desarrolla un sistema para rotar las llaves eficientemente. Esta práctica asegurará que incluso si una llave se filtra, los daños pueden ser limitados.

La implementación de estas soluciones puede requerir un desarrollo extenso. Sin embargo, es importante considerar los beneficios de los JWT a largo plazo. Pese a los retos, las soluciones existen y se deben aprovechar al máximo para mejorar la seguridad y funcionalidad de tus aplicaciones.

¿Queremos seguir utilizando JSON Web Tokens?

A pesar de sus beneficios, si no puedes implementar estas prácticas de buenas maneras, debemos considerar otras tecnologías como el manejo de sesiones. La decisión final debe basarse en tus necesidades específicas de seguridad y la capacidad de implementar medidas para mitigar riesgos.

Reflexiona: ¿cuándo es necesario usar JWT y cuándo deberíamos optar por alternativas? Comparte tus ideas y ejemplos en los comentarios para seguir aprendiendo juntos.