JSON Web Tokens (JWT) es una tecnología de estándar abierto (RFC 7519) que permite el intercambio seguro de información entre partes en forma de un objeto JSON. Esta información se puede verificar y confiar porque está firmada digitalmente. Los JWT se pueden firmar usando un secreto (con el algoritmo HMAC) o un par de claves pública/privada usando RSA o ECDSA.
En NodeJS, podemos usar paquetes como jsonwebtoken para trabajar con JWT. En este tutorial, exploraremos cómo generar un JWT en NodeJS.
Instalación
Para comenzar, necesitamos instalar el paquete jsonwebtoken. Puedes hacer esto usando npm (Administrador de paquetes de nodos) con el siguiente comando:
npm instala jsonwebtoken
Una vez instalado, puedes importarlo a tu archivo usando:
const jwt = require('jsonwebtoken');
Creando un JWT
Para crear un JWT, utilizamos la función sign() del paquete jsonwebtoken. Esta función acepta tres argumentos:
- La carga útil, que es un objeto JSON que contiene las reclamaciones. Los reclamos son declaraciones sobre una entidad (generalmente el usuario) e información adicional.
- El secreto, que es una cadena utilizada para firmar el token. Este secreto debe mantenerse a salvo y nunca debe exponerse.
- Las opciones, que es un objeto que contiene opciones adicionales como el algoritmo de firma y la validez del token.
Aquí tienes un ejemplo:
carga útil constante = { identificación: 1, nombre: 'John Doe', administrador: verdadero }; const secreto = 's3cr3t'; opciones constantes = { caducaEn: '2h' }; token const = jwt.sign(carga útil, secreto, opciones);
En este ejemplo, la carga útil contiene tres reclamos: id, nombre y administrador. El secreto es 's3cr3t' y el token caduca en 2 horas.
Comprobando un JWT
Una vez que crea un JWT, puede verificar su firma y decodificar la carga útil usando la función verificar() en el paquete jsonwebtoken. Esta función acepta tres argumentos:
- El token, que es la cadena JWT que desea verificar.
- El secreto, que es la misma cadena utilizada para firmar el token.
- Las opciones, que es un objeto que contiene opciones adicionales, como el algoritmo de firma.
Aquí tienes un ejemplo:
const decodificado = jwt.verify(token, secreto);
En este ejemplo, la función verificar() devuelve la carga útil decodificada si el token es válido. Si el token no es válido (por ejemplo, si la firma no coincide), la función arrojará un error.
Conclusión
Trabajar con JWT en NodeJS es simple y directo gracias al paquete jsonwebtoken. Este paquete proporciona funciones para crear y verificar JWT, lo que le permite implementar autenticación y autorización seguras en sus aplicaciones NodeJS.
Es importante recordar que los JWT son tan seguros como el secreto utilizado para firmarlos. Así que asegúrese de mantener su secreto a salvo y nunca exponerlo. Además, los JWT están codificados, no cifrados, lo que significa que cualquiera que obtenga el token podrá decodificar la carga útil. Por lo tanto, nunca coloques información confidencial en la carga útil de un JWT.