NewIntroducing QODEX QA Services — platform-powered QA for API-driven teams.Learn more →
QA Learning8 min read

JWT Explicado: Estrutura, Segurança e Boas Práticas

S
Shreya Srivastava
Content Team

O que é JWT?

JSON Web Tokens (JWTs) são uma forma padronizada de transmitir dados de forma segura entre duas partes. Eles contêm informações (claims) codificadas no formato JSON. Esses claims ajudam a compartilhar detalhes específicos entre as partes envolvidas.

Em essência, um JWT é um mecanismo para verificar a autenticidade de alguns dados JSON. Isso é possível porque cada JWT é assinado usando criptografia para garantir que seu conteúdo não foi adulterado durante a transmissão ou armazenamento.

É importante notar que um JWT garante a propriedade dos dados, mas não a criptografia. O motivo é que o JWT pode ser visto por qualquer pessoa que intercepte o token, pois ele é serializado, não criptografado.

É altamente recomendado usar JWTs com HTTPS, uma prática que se estende à segurança web em geral. O HTTPS não apenas protege a confidencialidade do conteúdo do JWT durante a transmissão, mas também oferece uma camada mais ampla de proteção para os dados em trânsito.

Um JWT é apenas uma string que se parece com isso:
xxxxx.yyyyy.zzzzz

Ele tem 3 partes:

  1. Header - indica o tipo do token (JWT) e o algoritmo utilizado (como HS256).

  2. Payload - contém os dados reais (como ID do usuário, função ou permissões).

  3. Signature - garante que o token não foi alterado por ninguém.

Como o JWT Funciona?

Como a Autenticação JWT Funciona

1. O Usuário Faz Login

  • Um usuário insere nome de usuário e senha.

  • O servidor verifica as credenciais.

  • Se estiver correto, o servidor cria um JWT contendo informações do usuário (por exemplo, userId: 123, role: "admin") e o assina com uma chave secreta.

2. Token Enviado ao Cliente

  • O JWT é enviado de volta ao cliente (geralmente na resposta de login).

  • O cliente o armazena com segurança (localStorage, sessionStorage ou cookies).

3. O Cliente Envia o JWT com as Requisições

  • Para cada requisição a uma API protegida, o cliente envia o JWT no cabeçalho Authorization assim:
    Authorization: Bearer <JWT>

  1. O Servidor Verifica o JWT

  • O servidor recebe o token.

  • Ele verifica a assinatura usando a chave secreta:

    • Se válida, ele confia nos dados internos (como a função do usuário).

    • Se inválida, rejeita a requisição (401 Unauthorized).

5. Acesso Concedido ou Negado

  • Se o token for válido e o usuário tiver as permissões corretas, o servidor permite o acesso.

  • Caso contrário, o servidor nega o acesso.

JWT

Exemplo:

  1. Usuário faz login e recebe JWT:
    { "userId": 123, "role": "admin" }

  2. Usuário chama /admin/dashboard com o token.

  3. Servidor verifica role = "admin".

  4. Acesso concedido.

JWT em Microsserviços, Serverless e Arquiteturas Distribuídas

Em sistemas modernos distribuídos ou serverless, os JWTs se destacam porque eliminam o estado de sessão compartilhado. Você pode emitir um token uma vez e validá-lo entre os serviços sem armazenamento central de sessão.

Boas práticas em contextos distribuídos:

  • Use assinatura assimétrica (RS256 / ES256) para que os microsserviços validem sem compartilhar um segredo simétrico.

  • Inclua as claims audience (aud), issuer (iss), jti (JWT ID) e nbf (not before) para evitar replay e uso indevido.

  • Combine tokens de acesso de curta duração e rotação de refresh token para limitar a exposição.

Esta seção ajuda os leitores a entender a escalabilidade e a segurança do JWT em sistemas distribuídos no mundo real.

Para orientações sobre renovação e revogação de tokens, consulte nosso Checklist de Segurança de API

Estrutura do JWT

A estrutura de um JWT (JSON Web Token) é composta por três partes principais, separadas por pontos (.):

  1. Header

    • Contém metadados sobre o token, como o tipo de token (JWT) e o algoritmo de assinatura usado (por exemplo, HS256, RS256).

    • Exemplo:

  2. Payload

    • Contém os dados reais (chamados de claims) que o token carrega.

    • As claims podem ser sobre o usuário (como user_id, role) ou metadados do token (como tempo de expiração).

    • Exemplo:

  3. Signature

  • Criada tomando o header codificado + payload codificado e aplicando a chave secreta com o algoritmo especificado.

  • Garante que o token não foi adulterado.

  • Fórmula:

O JWT final tem esta aparência:

  • xxxxx - Header Codificado

  • yyyyy - Payload Codificado

  • zzzzz - Assinatura

Structure of JWT

Exemplo de JWT passo a passo:

  1. Header (antes da codificação)

Após a codificação Base64Url - você pode experimentar a codificação Base64 usando nosso Codificador Base64 ou decodificar tokens existentes com o Decodificador Base64.

  1. Payload (antes da codificação)

Após a codificação Base64Url -

  1. Assinatura

Combinamos:

Base64UrlEncode(Header) + "." + Base64UrlEncode(Payload)

Depois fazemos o hash com HMACSHA256 e uma chave secreta (por exemplo, minhasecretkey).

Resultado de exemplo:

O JWT final tem esta aparência:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImV4cCI6MTcxNjAwMDAwMH0.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

JWT

{As duas primeiras partes podem ser decodificadas de volta para JSON (header + payload), mas a assinatura só pode ser verificada com a chave secreta. É assim que o JWT garante integridade e confiança.}

Cenários Comuns de Ataque e Como Mitigá-los

Veja os vetores de ataque JWT mais comuns e as etapas práticas de mitigação:

Ataque / Risco

Descrição

Mitigação

Roubo de token (XSS / acesso ao localStorage)

Atacantes roubam o JWT armazenado em JS do lado do cliente.

Use cookies HTTP-only, configure os flags SameSite e prefira cookies Secure.

Adulteração de algoritmo (ataque "none")

Um atacante força alg = none para contornar a verificação da assinatura.

Rejeite tokens com alg: none; use apenas algoritmos aprovados em uma lista de permissões.

Confusão de chave / injeção de chave

Uso de chaves de assinatura fracas ou incompatíveis.

Use chaves criptográficas fortes, faça rotação regularmente e verifique o kid (key ID) nos headers JWT.

Ataques de replay

Tokens são capturados e reutilizados de forma maliciosa.

Inclua um jti único, valide as claims nbf e exp, e mantenha uma lista negra ou armazenamento de valores jti revogados.

Refresh Tokens, Rotação e Estratégias de Revogação

Os JWTs não suportam revogação por padrão, tornando a renovação e a invalidação de tokens críticas. Veja estratégias para implementar fluxos seguros de refresh e revogação de tokens:

  • Rotação de refresh token: Emita um novo refresh token por requisição e invalide o anterior para reduzir riscos de replay.

  • Tokens de acesso de curta duração: Use expiração breve (por exemplo, 5 a 15 min) e exija refresh para acesso continuado.

  • Lista negra / armazenamento de tokens: Mantenha um armazenamento leve de identificadores jti revogados para rejeitar tokens comprometidos.

  • Janela de tolerância e detecção de reutilização: Permita uma estreita sobreposição para refresh, mas bloqueie a reutilização de refresh tokens antigos.

Isso fornece aos desenvolvedores um plano claro para gerenciamento seguro do ciclo de vida do token.

Exemplo: Criando e Validando JWT em Python / Go / Java

Benefícios do JWT

Os principais benefícios de usar JWT (JSON Web Token):

  1. Autenticação Stateless

    • Os JWTs não exigem armazenamento de dados de sessão no servidor.

    • O servidor apenas verifica o token, tornando-o escalável e eficiente.

  2. Compacto e Rápido

    • Os JWTs são pequenos em tamanho (formato JSON), por isso podem ser facilmente enviados em headers, URLs ou cookies.

    • Isso os torna rápidos para transmitir entre cliente e servidor.

  3. Seguro (Quando Usado Corretamente)

    • Os JWTs são assinados usando algoritmos como HMAC ou RSA, garantindo a integridade dos dados.

    • Não podem ser adulterados sem que a chave secreta/privada seja conhecida.

  4. Suporte entre Domínios e Plataformas

    • Os JWTs funcionam bem em sistemas distribuídos, microsserviços e APIs.

    • Podem ser usados em apps mobile, apps web e domínios diferentes.

  5. Autocontido

    • Os JWTs carregam todas as informações necessárias do usuário (claims) dentro do token.

    • Isso reduz as consultas repetidas ao banco de dados para autenticação.

  6. Flexibilidade

    • Os JWTs podem armazenar dados personalizados (funções, permissões, tempo de expiração).

    • Útil para controle de acesso e segurança refinada.

  7. Amplamente Adotado

    • JWT é um padrão (RFC 7519), suportado por muitas bibliotecas, frameworks e linguagens.

Em resumo: os JWTs tornam a autenticação mais simples, rápida e escalável para aplicações web e mobile modernas.

Conclusão

Construir e manter um inventário de APIs adequado e usar métodos de autenticação seguros como JWT não são mais opcionais, são essenciais para as organizações modernas. Um inventário de APIs atualizado oferece às empresas visibilidade, melhora a conformidade e fortalece a segurança, garantindo que nenhuma API passe despercebida. Ao mesmo tempo, o JWT fornece uma maneira escalável e segura de lidar com a autenticação, tornando as aplicações mais rápidas e fáceis de gerenciar.

Ao combinar um gerenciamento de API sólido com autenticação confiável, as organizações podem proteger seus ativos digitais, reduzir riscos e melhorar a eficiência. No Qodex.ai, acreditamos que segurança e simplicidade devem andar de mãos dadas, capacitando as empresas a inovar sem comprometer a segurança.


Perguntas Frequentes

O que é um JSON Web Token (JWT) e por que ele é usado?

Um JSON Web Token, ou JWT, é um token compacto e assinado digitalmente usado para transmitir informações de forma segura entre duas partes. É amplamente utilizado para autenticação e autorização em aplicações web porque permite que os servidores verifiquem a identidade do usuário sem armazenar dados de sessão. Os JWTs contêm claims codificados, como funções ou permissões do usuário, ajudando os sistemas a validar solicitações de acesso de forma eficiente, mantendo a comunicação stateless.

Como a autenticação JWT funciona em aplicações modernas?

A autenticação JWT funciona emitindo um token após o usuário fazer login com sucesso. O servidor codifica os principais dados do usuário e os assina com uma chave secreta antes de enviá-los ao cliente. Cada vez que o cliente faz uma requisição, ele inclui o token, permitindo que o servidor verifique sua autenticidade. Esse processo stateless reduz as consultas ao banco de dados, melhora a escalabilidade e simplifica a comunicação segura entre microsserviços e APIs.

Quais são os principais componentes de um JWT?

Um JSON Web Token é composto por três partes: o Header, o Payload e a Signature, separados por pontos. O header define o algoritmo usado, o payload contém dados do usuário ou claims, e a assinatura garante a integridade do token usando um hash criptográfico. Juntos, esses componentes tornam os JWTs leves e resistentes a adulterações, ideais para autenticação segura e de alto desempenho em sistemas distribuídos.

É seguro armazenar JWTs no localStorage ou em cookies?

Armazenar JWTs no localStorage ou em cookies depende do seu modelo de segurança. Embora o localStorage simplifique o gerenciamento de tokens, ele expõe os tokens a ataques XSS se o seu site não estiver devidamente sanitizado. Cookies seguros com HTTP-only são geralmente mais seguros, pois evitam o acesso do lado do cliente. Para aplicações sensíveis, combinar cookies com tempos de vida curtos de tokens e refresh tokens melhora a segurança do JWT sem afetar a experiência do usuário.

Como os JWTs se comparam aos tokens OAuth?

JWTs e tokens OAuth frequentemente trabalham juntos, mas servem a funções diferentes. OAuth é um framework de autorização que define como os clientes obtêm tokens, enquanto os JWTs são um formato de token usado nesse processo. Em essência, o OAuth fornece as regras e o JWT fornece a estrutura. As implementações OAuth baseadas em JWT são preferidas para APIs modernas porque reduzem o overhead e suportam autenticação seamless e stateless.

Quais são as boas práticas para proteger JSON Web Tokens?

Para proteger os JWTs de forma eficaz, use sempre chaves secretas fortes ou criptografia assimétrica, valide as assinaturas em cada requisição e defina tempos de expiração curtos. Evite armazenar dados sensíveis dentro dos payloads, pois os JWTs são apenas codificados em base64, não criptografados. Implemente mecanismos de revogação de tokens e HTTPS para evitar interceptação. Seguir essas práticas garante que a autenticação baseada em JWT permaneça escalável e em conformidade com os padrões modernos de segurança de API.