Curious TechieDev Toolbox
Todos os Guias/Autenticação8 min read

O que é JWT? Arquitetura de JSON Web Tokens (RFC 7519)

Autenticação sem estado, estrutura header/payload/assinatura, codificação Base64URL e por que decodificar não é validar.

Principais Conclusões
  • O JWT é composto por três partes separadas por pontos: Header, Payload e Assinatura.
  • Os dados são codificados em Base64URL, permitindo que qualquer pessoa leia o conteúdo sem a chave privada.
  • Decodificar um JWT NÃO é verificá-lo: a validação exige recalcular a assinatura com o segredo HMAC ou chave pública RSA.
  • O ataque alg: "none" acontece quando o servidor aceita tokens sem validação de assinatura.
  • Tokens sem estado exigem listas de negação ou tempos de expiração curtos para permitir revogação imediata.

Em arquiteturas modernas de microsserviços sem estado (stateless) e autenticação OAuth 2.0 / OpenID Connect, os JSON Web Tokens (JWT) servem como o mecanismo padrão para transmitir reivindicações de identidade com segurança entre cliente e servidor.

1. Anatomia do Token em 3 Partes

Uma string JWT consiste em três blocos codificados em Base64URL separados por pontos (.):

1. Cabeçalho (Vermelho)Algoritmo & Tipo de Token
2. Payload (Roxo)Claims & Dados do Usuário
3. Assinatura (Azul)Prova Criptográfica

2. Claims Registradas Padrão (iss, exp, sub)

  • iss (Issuer): A entidade que emitiu o token.
  • sub (Subject): O identificador exclusivo do usuário autenticado.
  • exp (Expiration Time): Timestamp Unix após o qual o token deve ser recusado.
  • iat (Issued At): Momento exato em que o token foi criado.

3. Assinatura Simétrica (HS256) vs Assimétrica (RS256)

O HS256 (HMAC-SHA256) utiliza uma única chave secreta compartilhada entre emissor e consumidor. Já o RS256 (RSA-SHA256) usa uma chave privada para assinar e uma chave pública (JWKS) para verificação, permitindo que terceiros validem a integridade sem permissão de emissão.

4. Principais Armadilhas e Falhas de Segurança

Falhas comuns incluem aceitar o cabeçalho "alg": "none", armazenar tokens sensíveis em localStorage (suscetível a XSS) e deixar de validar a assinatura antes de confiar nos dados do payload.