18.10. Trabajar con tokens web JSON (JWT) en NodeJS
JSON Web Tokens (JWT) es un estándar abierto (RFC 7519) que define una forma compacta y segura de pasar información entre partes como un objeto JSON. Esta información se puede verificar y confiar porque está firmada digitalmente. Los JWT se pueden firmar mediante un secreto (con el algoritmo HMAC) o un par de claves pública/privada mediante RSA o ECDSA.
La autenticación basada en JWT es una forma popular de autenticar aplicaciones web. Con la autenticación JWT, se almacena un token en el cliente, que se envía en cada solicitud al servidor para ser autenticado.
Cómo implementar la autenticación basada en JWT en una API NodeJS
Para implementar la autenticación basada en JWT en una API de NodeJS, necesitará los siguientes pasos:
- Instalar el paquete jsonwebtoken
- Crear una ruta de inicio de sesión para generar el token
- Verificar token en cada solicitud
1. Instalar el paquete jsonwebtoken
Primero, necesitarás instalar el paquete jsonwebtoken en tu proyecto NodeJS. Puede hacer esto usando npm (Administrador de paquetes de nodos) con el siguiente comando:
npm instala jsonwebtoken
2. Crea una ruta de inicio de sesión para generar el token
A continuación, deberá crear una ruta de inicio de sesión que generará el token JWT. A continuación se muestra un ejemplo de cómo puede hacer esto:
const jwt = require('jsonwebtoken'); const expresar = requerir('expresar'); aplicación constante = expresar(); app.post('/iniciar sesión', (req, res) => { // Autenticar usuario usuario constante = { identificación: 1, nombre de usuario: 'prueba', correo electrónico: 'test@test.com' } jwt.sign({usuario: usuario}, 'clave secreta', (err, token) => { res.json({ ficha: ficha }); }); });
En el ejemplo anterior, primero autenticamos al usuario. Luego usamos la función jwt.sign para crear el token JWT. La función jwt.sign toma tres parámetros: la carga útil (en este caso, el objeto de usuario), la clave secreta y una función de devolución de llamada.
3. Verificar token en cada solicitud
Finalmente, deberás verificar el token JWT en cada solicitud. Puedes hacerlo creando un middleware que verifique el token:
función authenticateToken(solicitud, res, siguiente) { const portadorHeader = req.headers['autorización']; if (tipo de encabezado de portador! == 'indefinido') { portador constante = portadorHeader.split(' '); const portadorToken = portador[1]; req.token = portadorToken; próximo(); } demás { res.enviarEstado(403); } } app.get('/api', authenticateToken, (req, res) => { jwt.verify(req.token, 'clave secreta', (err, authData) => { si(errar) { res.enviarEstado(403); } demás { res.json({ mensaje: 'API accedida exitosamente', fecha de autenticación }); } }); });
En el ejemplo anterior, el middleware authenticateToken comprueba si el token JWT está presente en el encabezado de autorización. Si el token está presente, se verifica mediante la función jwt.verify. Si el token es válido, se permite que la solicitud continúe. Si el token no es válido, se envía un estado de error 403 (Prohibido).
¡Y eso es todo lo que necesitas para implementar la autenticación basada en JWT en una API de NodeJS!