utildev
← Blog
Hash & Criptografia7 min

O que é JWT e como funciona?

Entenda a estrutura de um JSON Web Token, como funciona a assinatura, o que vai no payload, e quando usar JWT em vez de sessões.

JWT (JSON Web Token) é um padrão aberto (RFC 7519) para transmitir informações de forma compacta e verificável entre partes. Um JWT é uma string dividida em três partes separadas por pontos: header, payload e signature. É amplamente usado para autenticação e troca de informações em APIs REST.

A estrutura de um JWT

Cada parte do JWT é codificada em Base64URL (não criptografada). Isso significa que o conteúdo do header e do payload pode ser lido por qualquer pessoa — apenas a assinatura garante a integridade.

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.    ← Header
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6Ikpv.  ← Payload
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c  ← Signature
  • Header: algoritmo de assinatura (HS256, RS256) e tipo do token ("JWT")
  • Payload: as "claims" — dados do usuário (sub, name, role) + metadados (iat, exp)
  • Signature: HMAC ou RSA sobre header+payload com a chave secreta

HS256 vs RS256: qual algoritmo usar?

HS256 (HMAC-SHA256) usa uma chave simétrica — o mesmo segredo assina e verifica. É simples mas exige que todos os serviços que verificam o token conheçam o segredo. RS256 usa um par de chaves assimétricas: a chave privada assina, e a chave pública (distribuível) verifica. Para arquiteturas de microsserviços onde vários serviços verificam tokens, RS256 é a escolha mais segura.

O payload de um JWT é apenas codificado em Base64URL, não criptografado. Nunca coloque senhas, dados bancários ou informações sensíveis no payload de um JWT.

Claims padrão importantes

  • sub (subject): identificador do usuário
  • iat (issued at): timestamp de emissão
  • exp (expiration): timestamp de expiração — sempre defina
  • aud (audience): quem pode consumir o token
  • iss (issuer): quem emitiu o token

JWT vs Sessões: quando usar cada um?

Sessões armazenam estado no servidor — o servidor precisa consultar o banco para validar cada requisição. JWTs são stateless — toda a informação necessária está no token, sem consulta ao banco. Isso torna JWTs ideais para APIs distribuídas e microsserviços.

Por outro lado, JWTs não podem ser invalidados antes da expiração sem uma blacklist (que reintroduz estado). Para aplicações onde logout imediato e revogação de sessão são críticos, sessões com armazenamento no servidor ainda são mais adequadas.

Use o Decodificador de JWT do UtilDev para inspecionar o header e payload de qualquer token JWT diretamente no navegador, sem enviar dados a servidores externos.

Ferramentas relacionadas

Decodificador JWT
Decodifique e analise tokens JWT

Artigos relacionados

SHA-256 vs MD5: qual usar para segurança?6 min →O que é HMAC e quando usar?5 min →