Firmado de JSON Web Tokens con Librería JWT en Node.js

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

Resumen

¿Cómo firmar un JSON Web Token?

La firma de un JSON Web Token (JWT) es un proceso esencial para garantizar la autenticidad y la integridad de los datos que se transfieren en aplicaciones web. Utilizando la librería jsonwebtoken, podemos implementar un sistema de firmado en tres pasos fundamentales: definir el payload, elegir el algoritmo adecuado y firmar el token con un secret o clave privada. Esta implementación es crucial para proteger tus endpoints y garantizar la seguridad en la comunicación de datos.

¿Qué necesitamos para firmar un JWT?

  • Payload: Es el objeto JSON que contiene los Claim Names, como sub, name y exp. Utilizar la información del usuario verificado es vital para su correcta creación.
  • Secret o Private Key: Dependiendo del algoritmo de firmado:
    • Simétrico (HS256): Usa un secret.
    • Asimétrico (RS256): Usa una clave privada.
  • Opciones o callback function: Puede incluir configuraciones adicionales para el JWT.

Implementación práctica en Node.js

Construcción del payload

Antes de proceder al firmado, es vital estructurar correctamente el payload. A continuación, un ejemplo de cómo podría hacerse:

const user = /* Suponemos que el usuario está previamente definido y verificado */;
const payload = {
  sub: user.id, // Subject suele ser el ID del usuario
  name: user.full_name, // Usamos el nombre completo ya que no tenemos un campo 'name'
  exp: Math.floor(Date.now() / 1000) + (60 * 1) // Expiración en 1 minuto
};

Firmado del token

Para firmar el token, primero importamos la librería jsonwebtoken y luego utilizamos el método sign:

const jwt = require('jsonwebtoken');
const secret = process.env.SECRET_KEY; // Una buena práctica es utilizar variables de entorno

const token = jwt.sign(payload, secret);

Recomendaciones para el manejo del secret

  • Asegúrate de que el secret sea un string aleatorio y largo.
  • Usa variables de entorno para almacenar el secret y otros datos sensibles.
  • Nunca expongas tu secret ni tu clave privada en el repositorio.

Prueba y verificación en Postman

Para comprobar que el servidor y los endpoint funcionan correctamente, primero verifica el acceso al endpoint público:

  1. Realiza un request a public para confirmar que el servidor está funcionando.
  2. Solicita al endpoint token para obtener el JWT firmado.
  3. Evalúa el token recibido accediendo al endpoint privado.

Desafío para el lector: Implementa en otro lenguaje

Un gran ejercicio sería realizar esta misma implementación de firmado de un JWT en otro lenguaje de programación diferente a Node.js. Esto no solo te ayudará a ampliar tus habilidades, sino también a entender las diferencias entre las implementaciones en distintos entornos.

¡Anímate a poner en práctica tus conocimientos, explora nuevos lenguajes y sigue mejorando tus habilidades en la programación y seguridad de aplicaciones web!