O Básico: JWT – JSON Web Token

JWT

O que é?

É um token gerado a partir de dados “pessoais”, esse que pode ser trafegado entre aplicações ao se realizar requisições a APIs. As informações contidas no token são públicas e podem ser lidas por qual quer um que o po…


This content originally appeared on DEV Community and was authored by Gabriel_Silvestre

JWT

O que é?

É um token gerado a partir de dados "pessoais", esse que pode ser trafegado entre aplicações ao se realizar requisições a APIs. As informações contidas no token são públicas e podem ser lidas por qual quer um que o possua, porém há um mecanismo de segurança que faz com que somente quem tenha a senha, possa modificá-lo.

O que faz?

De forma geral os tokens podem ser usados para diversas finalidades, afinal eles são somente uma estrutura segura para o trafego de informações, porém seu uso mais comum é para autorização de usuários em diversos serviços.

Estrutura

Header

O Header do token irá conter duas propriedades, alg para definir o algoritmo de hash e typ para definir o tipo de token, no nosso caso será JWT.

{
  "alg": /*algoritmo de hash*/,
  "typ": "JWT",
}
{
  "alg": "HS256",
  "typ": "JWT",
}

Payload

O payload irá conter os dados do usuário, esses que não devem ser dados sensíveis (CPF, cartão, endereço, etc), apenas o essencial para dar ao usuário a autorização necessária para navegar e interagir com a aplicação.

{
  "username": "Big John",
  "name": "John Doe",
  "admin": false,
  "isPrime": true
}

Signature

É a assinatura utilizada para validar o token, dessa forma conseguimos verificar se o token recebido do cliente é igual ao que enviamos anteriormente, caso não sejam iguais, o token é considerado inválido.

// essa parte é a concatenação, criptografada, do Header + Payload e será gerada para nós pelo JWT.

Usando o JWT

Instalando

Antes de começarmos a implementar o JWT, precisamos instalar a biblioteca que irá gerar e validar os tokens, para isso usamos o comando:

npm i jsonwebtoken

npm i -D @types/jsonwebtoken  # caso usar TypeScript será necessário instalar os pacotes a parte

Configurando

Tendo instalado e importado o JWT para nosso arquivo, iremos configurá-lo. Nas configurações podemos definir o algoritmo de hash, o período de validade, entre outas opções.

As configurações consistem em um Objeto JS com algumas chaves pré existentes. Consultar a documentação para as chaves.

const jwtConfig = {
  expiresIn: '4d',  // <- Faz com que o token expire depois de 4 dias
  algorithm: 'HS256',  // <- Indica o algoritmo de hash HS256 para criptografia
};

Criando

Após termos definido nossas configurações iremos chamar o método .sign() para realmente criarmos nosso token, esse método irá receber os dados, o secret e as configurações como argumentos.

const jwt = require('jsonwebtoken');  // <- importação do jwt
const secret = 'meuSuperSegredo';  // Considerações logo abaixo*
const user = { email: 'gabriel@gabriel.com', username: 'Roxo' };  // <- usuário fake para demonstração

jwt.sign({ data: user }, secret, jwtConfig);  // <- data é a chave padrão do JWT para passarmos os dados

*O secret deve ser armazenado em variáveis de ambiente para maior segurança da aplicação, caso o declaremos hardcoded, estaremos deixando nossa aplicação vulnerável e nossos tokens/usuários em risco.

Validando

Para validarmos um token basta chamarmos o método .verify(), passando o token em questão e o secret utilizado como argumentos. Não se preocupe em referenciar o token criado anteriormente, pois a biblioteca do JWT faz isso para nós.

Caso o token seja inválido, ou tenha expirado, o próprio método irá nos retornar um erro, logo precisamos trabalhar essa validação dentro de um bloco try/catch, ou algo equivalente.

/*
Assim como na criação, na validação do token precisamos importar o jwt e o secret.

E a variável secret deve ser EXATAMENTE a mesma utilizada no jwt.sign (criação) para gerar o token, caso contrário a verificação falhará.

*No caso desse exemplo seria necessário criar uma outra constante para definir o secret (NÃO RECOMENDADO)
*/

jwt.verify(token, secret);


This content originally appeared on DEV Community and was authored by Gabriel_Silvestre


Print Share Comment Cite Upload Translate Updates
APA

Gabriel_Silvestre | Sciencx (2022-04-05T23:12:37+00:00) O Básico: JWT – JSON Web Token. Retrieved from https://www.scien.cx/2022/04/05/o-basico-jwt-json-web-token/

MLA
" » O Básico: JWT – JSON Web Token." Gabriel_Silvestre | Sciencx - Tuesday April 5, 2022, https://www.scien.cx/2022/04/05/o-basico-jwt-json-web-token/
HARVARD
Gabriel_Silvestre | Sciencx Tuesday April 5, 2022 » O Básico: JWT – JSON Web Token., viewed ,<https://www.scien.cx/2022/04/05/o-basico-jwt-json-web-token/>
VANCOUVER
Gabriel_Silvestre | Sciencx - » O Básico: JWT – JSON Web Token. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2022/04/05/o-basico-jwt-json-web-token/
CHICAGO
" » O Básico: JWT – JSON Web Token." Gabriel_Silvestre | Sciencx - Accessed . https://www.scien.cx/2022/04/05/o-basico-jwt-json-web-token/
IEEE
" » O Básico: JWT – JSON Web Token." Gabriel_Silvestre | Sciencx [Online]. Available: https://www.scien.cx/2022/04/05/o-basico-jwt-json-web-token/. [Accessed: ]
rf:citation
» O Básico: JWT – JSON Web Token | Gabriel_Silvestre | Sciencx | https://www.scien.cx/2022/04/05/o-basico-jwt-json-web-token/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.