Por dentro da arquitetura do JWT

O método JSON Web Token é um padrão de indústria bem definido com regras de aplicação e utilização. Neste MeetUp vamos mostrar um pouco de como esse método é aplicado e como funciona por trás dos panos.

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

Artigos relacionados