JSON Web Token

(7 minutos de leitura)


A importância da segurança vem aumentando ao longo dos anos devido ao aumento de ataques cibernéticos e violações de dados. As organizações precisam tomar precauções, como implementar medidas de segurança cibernética e usar tecnologias de criptografia para seus ativos digitais.

A segurança é um ponto essencial de qualquer aplicação web, independentemente do tamanho. Ele contém dados que precisam ser protegidos, pois podem ser acessados por usuários mal-intencionados.

Uma das formas de proteger os dados, é por meio do Token Based Authentication que utiliza um token JWT. Mas, afinal, você sabe o que é isso? É o que explicaremos neste artigo. Confira!


JWT: O QUE É E QUANDO UTILIZÁ-LO

JSON Web Token é um tipo de token de segurança usado no processo de autorização. Contém informações codificadas que podem ser decodificadas pelo servidor e passadas ao cliente solicitante.

Seu objetivo é transmitir ou armazenar de forma compacta e segura objetos JSON entre diferentes aplicações. O JWT é digitalmente assinado por meio de uma chave secreta com o algoritmo HMAC ou um par de chaves pública e privada RSA ou ECDSA.

Esse fato o torna um meio extremamente seguro de compartilhamento de informações e autenticação de usuários. Seu formato é baseado em texto e amplamente aceito por diversas linguagens de programação.

O JWT é um dos principais componentes do JOSE (Json Object Signing and Encryption). Nele estão contidas especificações como:

- JWE (Json Web Encryption), responsável pela criptografia para a assinatura do token;
- JWA (Json Web Algorithms), a respeito do algoritmo; 
- JWK (Json Web Keys) correspondente as chaves para assinatura;
- JWS (Json Web Signature), a assinatura do token.
- JWT, elemento JOSE, é o token em si.

Sua utilização acontece em dois cenários: no processo de autorização em aplicações ou na troca de informações. A seguir detalhamos suas formas de uso. Confira!


AUTORIZAÇÃO

O cenário mais comum para usar JSON Web Tokens é autenticar usuários fornecendo-lhes o token e permitindo que eles acessem as rotas, serviços e recursos apropriados em seu site ou servidor.


TROCA DE INFORMAÇÕES

Os JWTs podem ser assinados usando pares de chaves públicas e privadas. Isso fornece algum nível de garantia de que o remetente é quem diz ser.


ESTRUTURAS DO JWT

Os JSON Web Tokens consistem em três partes separadas por pontos (.). Essas partes são:

- Header;
- Payload;
- Signature.


HEADER

O header, ou cabeçalho, fica localizado no início do token e é composto por dois elementos: o alg e o typ. O primeiro indica qual o algoritmo de criptografia usado e o segundo informa o tipo de token.

No entanto, não obrigatoriamente todo token JWT contém a informação do tipo token. A informação essencial nesse caso é a que indica qual o algoritmo de assinatura foi utilizado.


PAYLOAD

O Payload, ou corpo, é onde ficam contidas as claims. Claims são declarações sobre o usuário, e dados adicionais.

O corpo do token JWT é constituído por informações opcionais, ou seja, informações que a aplicação que o gerou deseja informar, com exceção da chave sub que é obrigatória, já que é o fator identificador da entidade a qual o token se refere.

Existem 3 tipos de claims em payloads: reserved, public e private claims. Os reserved claims são atributos não obrigatórios, porém recomendados, que podem ser um conjunto de informações uteis e interoperáveis normalmente utilizados em protocolos de segurança em API’s. Essas claims pré-determinadas são padronizadas pelo sistema e podem ser classificadas em:

- Json Token Identifier (jti): é a identidade única do token;
- iss: Trata-se do usuário que emitiu o token;
- iat: Identifica o tempo de existência do token a partir do horário de sua emissão;
- nbf: Determina a validade do token;
- exp: Refere-se ao tempo de expiração do token. Ou seja, após o período determinado, o token não é mais aceito para processamento;
- sub: Indica o assunto do token;
- aud: Identifica o público do token, ou seja, o consumidor final.


Os public claims são os atributos que definem o uso do JWT e informações úteis para a aplicação. Já o private claims são aqueles definidos especialmente para compartilhar informações entre aplicações.

É importante destacar que não se deve colocar informações sensíveis no payload, já que é possível acessar o conteúdo de cada segmento de um jwt token. O processo para visualização de conteúdo é feito por meio de um Base64 decode.


SIGNATURE

Trata-se de um dos elementos mais sensíveis do jwt pois é uma espécie de produto dos outros dois componentes. Sua composição é feita por meio da codificação (encode) do header e do payload, somado a uma palavra-chave.

A assinatura consegue identificar se a mensagem do jwt token não foi violado em algum momento. A palavra-chave segredo concede a geração de outros tokens, sendo exclusiva do servidor.


CONSTRUÇÃO DE UM TOKEN

Um token nada mais é do que uma assinatura digital, ou seja, uma chave. Dessa forma, é uma string, uma cadeia de caracteres que funciona para representação de um objeto.

Uma assinatura é uma parte sensível à segurança de um token destinada a proteger a integridade das informações. Para garantir essa proteção, existe uma fórmula padrão qye exige que o token seja uma hash em Base64 gerada de um algoritmo de criptografia, por exemplo SHA256 ou SHA512, e essa hash precisa ser feita por meio do header e do payload do token.


VERIFICAÇÃO

Um token seguro é matematicamente impossível de ser decodificado sem a chave secreta do aplicativo. No entanto, uma vez descoberta, qualquer aplicação pode decodificar a assinatura e verificar sua validade.

Isso é realizado ao gerar uma assinatura utilizando o header e o payload fornecidos pelo cliente para então comparar essa assinatura gerada com a presente no token enviado pelo cliente. Uma vez que as assinaturas apresentadas sejam idênticas, o acesso é concedido na aplicação.


NA PRÁTICA

Para chegar ao resultado final de um token é necessário portanto:

- Ditar um algoritmo (alg) e um tipo (typ) no hedader;
- Informar as claims, que podem ser registradas ou personalizadas, do token;
- Interligar os três elementos: header, payload e signature.


Gostou do nosso conteúdo? Então siga-nos nas redes sociais para ficar por dentro de mais informações e acompanhe o nosso blog.
Compartilhe este artigo em suas redes sociais:
Avalie este artigo:

Outros artigos que você pode ter interesse em ler

  • Todos (185)
  • Bem estar (18)
  • Carreira (38)
  • Competições (6)
  • Desenvolvimento (112)
  • Design (8)
  • Diversidade e Inclusão (3)
  • Eventos (3)
  • História (15)
  • Indústrias (6)
  • Inovação (38)
  • Liderança (8)
  • Projetos (23)
Você gostaria de ter um artigo ou vídeo seu publicado no blog e redes sociais da beecrowd? Caso tenha interesse, envie-nos um e-mail com o assunto “BLOG” para [email protected] e passaremos mais detalhes sobre o processo e pré-requisitos para ter o seu artigo/vídeo publicado em nossos canais

Sede
Rua Funchal, 538
Cj. 24
Vila Olímpia
04551-060
São Paulo, SP
Brasil

© 2023 beecrowd

Todos os Direitos Reservados