Afinal, o que é JWT (Json Web Token)

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