Este MeetUp introduz o padrão de indústria JSON Web token, que é uma ferramenta para autenticação entre duas partes. Ela é utilizada para realizar transferências seguras de informações pela Internet.

Apresentaremos também como este método é utilizado na linguagem JavaScript com a plataforma Node.js utilizando a biblioteca padrão mantida pela Auth0: jsonwebtoken. Observe o código de criação:


const jwt = require('jsonwebtoken');
const secret = 'my-custom-token';

const token = jwt.sign(
   {
       email: 'aylan@boscarino.com',
       exp: '1516239022'
   },
   secret
);
jwt.verify(token, secret, function (err, payload) {
   if (err) {
           console.error('token inválido');
   } else {
       console.log(payload);
   }
});

Por fim, mostraremos como é o passo a passo na construção de um token JWT, passando pela conversão do Header e do Payload até a forma de como é feita a construção de uma Signature segura a partir deles. Vaja o código a seguir:


const header = JSON.stringify({
 alg: 'HS256',
 typ: 'JWT'
});

const base64Header = Buffer.from(header)
 .toString('base64')
 .replace(/\+/g, '-')
 .replace(/\//g, '_')
 .replace(/=/g, '');

const payload = JSON.stringify({
   email: 'aylan@boscarino.com',
   exp: 1516239022
});

const base64Payload = Buffer.from(payload)
 .toString('base64')
 .replace(/\+/g, '-')
 .replace(/\//g, '_')
 .replace(/=/g, '');

const crypto = require('crypto');

const secret = 'my-custom-secret';
const data = base64Header + '.' + base64Payload;

const signature = crypto
 .createHmac('sha256', secret)
 .update(data)
 .digest('base64');

const signatureUrl = signature
 .replace(/\+/g, '-')
 .replace(/\//g, '_')
 .replace(/=/g, '');

const token =
   base64Header + '.' + base64Payload + '.' + signatureUrl

07:24 min

Saiba mais Veja a Série Autenticação com JWT no Node + Angular