NODEJSBACKEND

Transmite información segura en Nodejs con JsonWebTokens

12 jul. 2018|Lectura de 2 minutos

Los JsonWebTokens (JWT) son un estandar abierto que nos permite transmitir información de manera segura entre dos partes.

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:

xxxxx.yyyyyy.zzzzzz

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
 

JWT codificado

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:

{
  "alg": "HS256",
  "typ": "JWT"
}

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:

{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}

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:

npm install -S jsonwebtoken

Y para crearlo es tan fácil como ejecutar el método sign() de la siguiente manera:

const jwt = require('jsonwebtoken')

const payload = { id: 1,name: 'Alejandro', lastname: 'Garcia' }
jwt.sign(payload, 'SECRET_KEY', { expiresIn: 2days })

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.