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.