🔏 Clase #9: Firmar y verificar tokens 9/20 🔏
Pasos: 📝
- Vamos a la página de JWT (enlace: aquí), en el menú superior de la página dice ++“Libraries”++ entrar a esa pestaña, seleccionar en el menú de la derecha ++“Filter by”++ a “Node.js”, saldrá todas las librerías asociadas a Node.js, para ésta clase se instalará la de jsonwebtoken.
- Vamos a la terminal y ejecutamos:
npm install jsonwebtoken
Al terminar de instalar debe salir:
found 0 vulnerabilities
- Vamos a VSC y creamos el archivo token-sign.js, el código queda:
const jwt = require('jsonwebtoken');
const secret = 'myCat';
//Con el sub es la forma que se indentificará el usuario
const payload = {
sub: 1,
role: 'customer'
}
//Con signToken se genera el token
function signToken(payload, secret) {
return jwt.sign(payload, secret);
}
//Firma
const token = signToken(payload, secret);
console.log(token);
Guardamos, y creamos otro archivo llamado token-verify.js, el código queda:
//Librería de JWT
const jwt = require('jsonwebtoken');
//El secret es importante porque con él se encriptará el header y el payload
const secret = 'myCat';
const token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOjEsInJvbGUiOiJjdXN0b21lciIsImlhdCI6MTYzMDQzMzY1M30.tY6btdWHq1J9qYVTbjYrt9vxrfWKHi9fuOhElKmwf9k';
//Se ejecuta verify para comprobar si la firma es válida
function verifyToken(token, secret) {
return jwt.verify(token, secret);
}
//El payload es lo que se va a encriptar dntro del token
const payload = verifyToken(token, secret);
console.log(payload);
Guardamos. Ejecutamos con el botón del triangulo con dirección a la derecha, en la terminal de VSC en la pestaña OUTPUT, sale las respuesta para ambos archivos:
[Running] node "/home/marigabi/projects/platzi-backend-node-jwt/my-store-auth/token-sign.js"
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOjEsInJvbGUiOiJjdXN0b21lciIsImlhdCI6MTY3OTUzMDEzNH0.iEAYwDfi_KPeRrV4dcD4bhyhcP3t6zgNqG8gP9Lgcfs
[Done] exited with code=0 in 3.049 seconds
[Running] node "/home/marigabi/projects/platzi-backend-node-jwt/my-store-auth/pass-verify.js"
true
[Done] exited with code=0 in 0.474 seconds
Cuando se compila el archivo token-sign.js muestra el token, si vamos a la página de JWT (enlace: aquí), entramos en el menú superior en la pestaña ++“Debugger”++ y en el cuadro izquierdo debajo de “Encoded”, pegamos el token que nos salió impresa con token-sign.js: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOjEsInJvbGUiOiJjdXN0b21lciIsImlhdCI6MTY3OTUzMDEzNH0.iEAYwDfi_KPeRrV4dcD4bhyhcP3t6zgNqG8gP9Lgcfs
En el recuadro del ++“HEADER”++ sale:
{
"alg": "HS256",
"typ": "JWT"
}
En el recuadro del ++“PAYLOAD”++:
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
Si analizamos el ++“true”++ después de compilar a token-verify.js, nos indica que la verificación ha sido exitosa, ya que pasamos correctamente el token generado.