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