Firmado de JSON Web Tokens con Librería JWT en Node.js
Clase 9 de 25 • Curso 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
yexp
. 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:
- Realiza un request a
public
para confirmar que el servidor está funcionando. - Solicita al endpoint
token
para obtener el JWT firmado. - 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!