Dev (Back & Front)ARTIGO

Entendendo tokens JWT

O autor explica neste artigo, o que são os tokens JWT, passando pelos conceitos principais do Header, Payload e Signature.

O JWT é um padrão (RFC-7519) de mercado que define como transmitir e armazenar objetos JSON de forma compacta e segura entre diferentes aplicações. Os dados nele contidos podem ser validados a qualquer momento, pois o token é assinado digitalmente.

Ele é formado por três seções: Header, Payload e Signature.

Header

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

Payload

O Payload é um objeto JSON com as Claims (informações) da entidade tratada, normalmente o usuário autenticado.

Essas claims podem ser de três tipos:

  • 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.

Por segurança, recomenda-se não armazenar informações confidenciais ou sensíveis no token.

Signature

A assinatura é a concatenaçã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 o invasor poderia interceptar a requisição e modificar seu conteúdo, desta forma personificando o usuário 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.

Apenas quem está de posse da chave pode criar, alterar e validar o token.

Resultado final

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

Usando o token

Ao fazer login em um serviço de autenticação, um token JWT é criado e retornado para o client. Esse token deve ser enviado para as APIs através do header Authorization de cada requisição HTTP com a flag Bearer, conforme ilustra o diagrama abaixo.

Authorization: Bearer [token]

Em posse do token, a API não precisa ir até o banco de dadosBanco de dados134 conteúdosSQL ou NoSQL: eis a questão!!Data · mar 2020Banco de dados: como organizar e dar segurança para milhões de dados de loteriasData · mai 20215 serviços gratuitos na cloud para bancos de dados PostgresData · fev 2025Ver tudo em Data consultar as informações do usuário, pois contido no próprio token JWT já temos suas credenciais de acesso.

Nos próximos artigos mostrarei como criar uma API em ASP.NET.NET113 conteúdosNovidades do .NET 9 – o tipo genérico OrderedDictionaryDev (Back & Front) · dez 2024Novidades .NET 10: novas formas de uso do .NET CLIDev (Back & Front) · dez 2025Novidades do .NET 5: implementando um proxy reverso com YARP + ASP.NET 5Dev (Back & Front) · nov 2020Ver tudo em Dev (Back & Front) Core com autenticação usando JWT.

Espero que tenham gostado, e se ficou alguma dúvida ou caso tenham críticas e sugestões, por favor entrem em contato.

Abraços!

Referências

Atua como líder técnico, arquiteto e desenvolvedor de software há mais de 10 anos, com foco em tecnologias Microsoft. É formado em Análise e Desenvolvimento de Sistemas. Possui experiência desenvolvendo software para as áreas de Call-Center, Financeiras e Educacional. Também é autor técnico em portais e blogs especializados.

Ver perfil