Los JsonWebTokens (JWT) son un estandar abierto que nos permite transmitir información de manera segura entre dos partes, gracias a que es digitalmente firmado por un algoritmo HMAC o por una llave pública o privada.
Los usos más frecuentes que reciben los JWT son:
- Autenticación
- Intercambio de información
¿Que compone un JWT?
La estructura de un JWT se compone de tres partes:
- Header
- Payload
- Signature
y a su vez estas partes se dividen siguiendo el siguiente formato:
1xxxxx.yyyyyy.zzzzzz 2
Donde cada grupo de letras es a su vez una parte del JWT, las x
el header, las y
el payload y las z
el signature.
Ya en la práctica un JWT se veria más como esto
Header
El Header
de un JWT generalmente contiene información sobre el tipo de JWT y que algoritmo se uso para su encriptación, por ejemplo:
1{ 2 "alg": "HS256", 3 "typ": "JWT" 4} 5
Payload
El payload nos sirve para enviar informacion en el token, la cual puede ser de cualquier tipo, como por ejemplo información del usuario. Un payload decodificado se veria algo asi:
1{ 2 "sub": "1234567890", 3 "name": "John Doe", 4 "iat": 1516239022 5} 6
Signature
El signature nos permite verificar si el token ha sido modificado o alterado en el camino y se genera con las dos partes anteriores (Payload, header) codificados en base64 y con una llave secreta.
¿Como crear un JWT?
Crear estos JWT en Node es bastante sencillo gracias a la librería jsonwebtoken la cual podemos instalar en cualquiera de nuestros proyectos con la siguiente línea en la consola:
1npm install -S jsonwebtoken 2
Y para crearlo es tan fácil como ejecutar el método sign()
de la siguiente manera:
1const jwt = require('jsonwebtoken') 2 3const payload = { id: 1,name: 'Alejandro', lastname: 'Garcia' } 4jwt.sign(payload, 'SECRET_KEY', { expiresIn: 2days }) 5
Lo que estamos haciendo aqui solo es ejecutar el metodo sign
que trae ya implementado la libreria jsonwebtoken
donde recibe por parámetro, un objeto que sera el payload que queremos enviar codificado en el token, en este caso estoy enviando data del usuario pero puede ser un objeto con cualquier tipo de información, en segundo lugar debes de poner tu llave secreta que puede ser cualquier string, por último y opcionalmente podemos ingresar el tiempo en el cual este token sera valido.
Y con esto ya habremos creado nuestro primer token listo para ser enviado a nuestro frontend para ser utilizado en los casos anterirmente mencionados.
Si quieres saber más sobre JWT te recomiendo visitar jwt.io.
Hasta la próxima.