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.
Page loaded in 29.94 ms