top of page

Afinal, o que é JWT (Json Web Token)

Rodrigo Santos
17 de dez. de 2019
2 min de leitura


O JWT nada mais é que um padrão (RFC-7519) de mercado que define como transmitir e armazenar objetos JSON de forma simples, compacta e segura entre diferentes aplicações, muito utilizado para validar serviços em Web Services pois os dados contidos no token gerado pode ser validado a qualquer momento uma vez que ele é assinado digitalmente.

Vamos entender melhor a estrutura de um JWT, ele é formado por três seções, são elas Header, Payload e Signature. 


Header


O Header é um objeto JSON que define informações sobre o tipo do token (typ), e o algorítmo de criptografia que foi usado em sua assinatura (alg), normalmente HMAC SHA256 ou RSA.

{
  "alg": "HS256",
  "typ": "JWT"
}


Payload


O Payload é um objeto JSON com as Claims (informações) da entidade tratada, aqui geralmente é utilizado dados do usuário autenticado.


Essas claims podem ser de 3 tipos, como: Reserved claims, Public claims e Private claims 

Reserved claims: atributos não obrigatórios (mas recomendados) que são usados na validação do token pelos protocolos de segurança das APIs.


  • sub (subject) = Entidade à quem o token pertence, normalmente o ID do usuário;

  • iss (issuer) = Emissor do token;

  • exp (expiration) = Timestamp de quando o token irá expirar;

  • iat (issued at) = Timestamp de quando o token foi criado;

  • aud (audience) = Destinatário do token, representa a aplicação que irá usá-lo.


Geralmente os atributos mais utilizados são: sub, iss e exp.


Public claims: atributos que usamos em nossas aplicações. Normalmente armazenamos as informações do usuário autenticado na aplicação.


Private claims: atributos definidos especialmente para compartilhar informações entre aplicações.

{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
}

 

Signature


A assinatura é a junção dos hashes gerados a partir do Header e Payload usando base64UrlEncode, com uma chave secreta ou certificado RSA.


Essa assinatura é utilizada para garantir a integridade do token, no caso, se ele foi modificado e se realmente foi gerado por você.


Isso previne ataques do tipo man-in-the-middle, onde um hacker poderia interceptar a requisição e modificar seu conteúdo com informações falsas. Caso o payload seja alterado, o hash final não será válido pois não foi assinado com sua chave secreta e a informação será rejeitada. 


Resultado final


O resultado final é um token com três seções (header, payload, signature) separadas por “.” — ponto, segue abaixo um exemplo.




Usando o token


Após se fazer login em um serviço de autenticação um token JWT é criado e retornado para o cliente. Esse token deve ser enviado para as APIs através do header "Authorization" de cada requisição HTTP com a flag Bearer seguida por um espaço conforme ilustra o diagrama abaixo.




Utilizando o JWT Token você consegue criar seus WebServices de maneira mais segura, garantindo assim que cada pedido após o login é legítimo.


Bons estudos!



Comentários


bottom of page