Resumen

Contar con un sistema de login confiable es esencial, pero no suficiente por sí solo. Para proteger los endpoints y permitir un acceso autorizado en aplicaciones web, móviles o de escritorio, la implementación de JSON Web Token (JWT) es clave. A continuación, verás cómo se realiza esta integración, por qué es tan relevante y cuáles son las mejores prácticas para asegurar tus datos.

¿Por qué usar JSON Web Token para autenticación y autorización?

El login tradicional basado en cookies solo es útil para aplicaciones web, ya que sus métodos de sesión no funcionan en entornos móviles o de escritorio. Por eso, JWT se convierte en la modalidad estándar, ya que facilita autenticación multiplataforma y permite conectividad segura con diversos sistemas. Usar JWT garantiza flexibilidad y escalabilidad, integrándose perfectamente con arquitecturas modernas.

¿Cómo funciona un JSON Web Token y qué información contiene?

Un JSON Web Token está compuesto usualmente por tres partes: payload, encabezado y firma. Dentro del payload es común encontrar identificadores como el sub (ID del usuario), fechas de expiración y, en algunos ejemplos, roles o nombre de usuario. Sin embargo, no se recomienda almacenar información sensible como emails o privilegios de administrador, ya que cualquiera con acceso al token puede descifrar su contenido. Lo esencial es incluir únicamente un identificador (primary key) y dejar los datos sensibles fuera del token, consultándolos solo desde la base de datos cuando sea necesario.

  • La firma es generada con un secreto al que solo el backend debe acceder.
  • Si alguien intenta verificar la autenticidad del token sin el secreto correcto, la firma será inválida.
  • Solo el backend legítimo puede validar si el token es original y seguro.

¿Cuáles son los pasos clave para implementar JWT en NestJS y proteger las rutas?

  1. Instalación de dependencias: Es necesario instalar paquetes especializados como nestjs-jwt y passport-jwt.
  2. Configuración en el módulo de autenticación: Se importa JWT Module al módulo de autenticación, definiendo el secreto y tiempo de expiración del token (ejemplo: seis días).
  3. Creación de un método para generar el token: Se desarrolla un método generateToken, el cual recibe el usuario autenticado y genera el JWT usando solo el sub.
  4. Adaptación del endpoint de login: El endpoint retorna tanto la información permitida del usuario como el access token recién generado.
  5. Protección avanzada del secreto: En vez de colocar el secreto directamente en el código, se emplea una variable de ambiente tipo JWT_SECRET, protegida y fuera del alcance público. Se recomienda especificar en archivos ejemplo (.env.example) las variables requeridas, sin exponer su valor.

¿Qué buenas prácticas existen al manejar el secreto y la validez del token?

  • Nunca expongas el secreto en el código fuente.
  • Solo personal autorizado o procesos internos deben conocer la clave usada para firmar los tokens.
  • Manejar el secreto mediante variables de ambiente asegura que el valor real no se incluya en los repositorios ni archivos compartidos.
  • Renovar el token periódicamente y usar estrategias de refresh puede fortalecer la seguridad.

¿Ya utilizas JWT en tus proyectos? Comparte tus experiencias o dudas en los comentarios y sigue aprendiendo sobre la protección de tus aplicaciones.