JSON Web Token (JWT) es un estándar abierto (RFC 7519) que permite la transmisión segura de información entre diferentes partes como un objeto JSON. Esta información se puede verificar y confiar en su autenticidad, ya que está firmada digitalmente. En este artículo, exploraremos qué es JWT, cómo funciona y cómo implementarlo en aplicaciones web.
JWT es un método de representación de información en un formato seguro y compacto que puede ser transmitido a través de URLs, POST O AJAX. Es comúnmente utilizado para la autenticación y autorización de usuarios en aplicaciones web.
Un JWT consta de tres partes:
Header
El encabezado típicamente consiste en dos partes: el tipo de token, que es JWT, y el algoritmo de firma que se está utilizando, como HMAC SHA256 o RSA.
Ejemplo de un Header en formato JSON:
{ "alg": "HS256", "typ": "JWT" }
Payload
La carga útil contiene las afirmaciones (claims) sobre un usuario y otros datos. Las afirmaciones pueden ser registradas, públicas o privadas.
Ejemplo de un Payload:
{ "sub": "1234567890", "name": "John Doe", "iat": 1516239022 }
Signature
Para crear la firma, se toma el encabezado codificado en Base64Url y el payload codificado en Base64Url, y se combina con una clave secreta usando el algoritmo especificado en el encabezado.
Ejemplo de la firma:
HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), your-256-bit-secret)
JWT funciona en un flujo sencillo:
Si estás utilizando Node.js, es probable que desees utilizar el paquete jsonwebtoken. Puedes instalarlo usando npm:
npm install jsonwebtoken
Cuando un usuario inicia sesión exitosamente, puedes generar un JWT:
const jwt = require('jsonwebtoken'); const user = { id: 1, name: 'John Doe' }; // Firmar el token const token = jwt.sign(user, 'secretkey', { expiresIn: '1h' }); console.log(token);
Cada vez que recibas un token del cliente, es importante verificarlo para asegurarte de que sea válido:
jwt.verify(token, 'secretkey', (err, decoded) => { if (err) { return res.sendStatus(403); // Forbidden } console.log(decoded); // Información del usuario decodificada });
Puedes crear un middleware para autenticar utilizando JWT en tu servidor:
function authenticateToken(req, res, next) { const token = req.header('Authorization').split(' ')[1]; if (!token) return res.sendStatus(401); jwt.verify(token, 'secretkey', (err, user) => { if (err) return res.sendStatus(403); req.user = user; next(); }); }
JWT es una herramienta poderosa para la autenticación y autorización en aplicaciones web. Al permitir la transmisión segura de información, JWT se ha convertido en un estándar preferido en muchas aplicaciones modernas. Aunque tiene sus ventajas y desventajas, entender cómo implementarlo correctamente puede mejorar significativamente la seguridad y eficiencia de tu aplicación web.
Toma tu tiempo para entender cada concepto antes de continuar con el siguiente.
Practica los ejemplos en tu propio entorno de desarrollo para mejor comprensión.
No dudes en revisar los recursos adicionales mencionados en el artículo.
Page loaded in 23.60 ms