🎫
← Voltar aos guias

O que é JWT? Um Guia Completo sobre JSON Web Tokens

· Tags: what-is-jwt, jwt-authentication, jwt-guide, api-security, token-based-auth

O que é JWT?

JSON Web Token (JWT) é um padrão aberto (RFC 7519) que define uma forma compacta e autocontida de transmitir informações com segurança entre partes como um objeto JSON. Os JWTs são o formato de token dominante em aplicações web modernas, usados para tudo, desde autenticação de usuários e autorização de API até troca segura de dados entre microsserviços.

Como Funciona a Autenticação JWT

A autenticação JWT segue um padrão sem estado (stateless) que elimina a necessidade de armazenamento de sessão no servidor. Entender esse fluxo é fundamental para entender por que os JWTs se tornaram a escolha padrão para a segurança de APIs modernas.

O Fluxo de Autenticação

  1. O usuário faz login — O cliente envia as credenciais (nome de usuário e senha) para o servidor de autenticação.
  2. O servidor cria um JWT — O servidor valida as credenciais, cria um JWT contendo a identidade e as permissões do usuário, assina-o com um segredo ou chave privada e o retorna ao cliente.
  3. O cliente armazena o token — O cliente armazena o JWT, normalmente em localStorage, sessionStorage ou em um cookie somente HTTP.
  4. O cliente envia o token em cada requisição — Para cada requisição de API subsequente, o cliente inclui o JWT no header Authorization usando o esquema Bearer: Authorization: Bearer <token>.
  5. O servidor verifica o token — O servidor verifica a assinatura do JWT, confere o tempo de expiração e extrai as claims (declarações) do usuário para autorizar a requisição.
  6. Nenhuma consulta de sessão necessária — Como o JWT contém todas as informações necessárias, o servidor não precisa consultar um banco de dados ou cache para identificar o usuário.

Por Que Isso Importa

A autenticação tradicional baseada em sessão armazena IDs de sessão na memória ou no banco de dados do servidor. Cada requisição autenticada exige uma consulta. Os JWTs eliminam essa consulta — o token em si prova a identidade do usuário. Isso torna os sistemas baseados em JWT inerentemente escaláveis, porque qualquer servidor em um cluster pode verificar um token sem estado de sessão compartilhado.

JWT vs Autenticação Baseada em Sessão

| Aspecto | Autenticação JWT | Autenticação Baseada em Sessão | |---------|------------------|--------------------------------| | Armazenamento | No cliente (no token) | No servidor (na memória ou no DB) | | Escalabilidade | Nenhum armazenamento de sessão compartilhado necessário | Exige armazenamento de sessão compartilhado entre instâncias | | Entre domínios | Funciona naturalmente entre domínios | Difícil compartilhar sessões | | Compatível com mobile | Sim (sem necessidade de cookies) | Exige suporte a cookies | | Revogação | Difícil (até o token expirar) | Fácil (remover a sessão do armazenamento) | | Tamanho do payload | Maior por requisição (token no header) | Mínimo (apenas o ID da sessão) |

Por Que o JWT é Usado para Segurança de API

As características que tornam o JWT adequado para autenticação também o tornam ideal para proteger APIs.

Sem Estado e Escalável

Todo JWT carrega todas as informações de que o servidor precisa para autorizar uma requisição. Não há banco de dados de sessão a consultar, nem cache a verificar, nem estado a sincronizar entre servidores. Os balanceadores de carga podem rotear requisições para qualquer instância de servidor sem coordenação.

Entre Domínios e Entre Origens

O JWT funciona naturalmente entre diferentes domínios e origens. Um token emitido por auth.example.com pode ser usado para acessar api.example.com e admin.example.com. Isso torna o JWT a base dos sistemas de single sign-on (SSO).

Autorização Granular

O payload do JWT pode incluir claims (declarações) personalizadas para papéis, permissões e associações de organização:

{
  "sub": "user_abc123",
  "role": "admin",
  "permissions": ["read:users", "write:users", "delete:users"],
  "org_id": "org_xyz789",
  "iat": 1516239022,
  "exp": 1516325422
}

O servidor de API lê essas claims diretamente do token, sem nenhuma consulta adicional.

JWT para Single Sign-On (SSO)

O single sign-on é um dos casos de uso mais comuns do JWT. Em uma arquitetura típica de SSO:

  1. Um usuário faz login no provedor de identidade (IdP) — como Auth0, Okta ou Keycloak.
  2. O IdP emite um JWT assinado com sua chave privada.
  3. O usuário apresenta esse JWT a vários aplicativos.
  4. Cada aplicativo verifica a assinatura usando a chave pública do IdP.
  5. Cada aplicativo confia no token sem se comunicar com o IdP em cada requisição.

Esse padrão permite que um único login conceda acesso a dezenas de serviços — e-mail, armazenamento de arquivos, gerenciamento de projetos, sistemas de RH — sem que cada serviço implemente seu próprio fluxo de login.

Boas Práticas de Segurança com JWT

Embora o JWT forneça bases sólidas para a segurança de APIs, a implementação correta é essencial.

Mantenha os Tokens de Vida Curta

Defina a claim exp (expiração) para uma duração curta — de 15 minutos a 1 hora para tokens de acesso. Use tokens de atualização (refresh tokens) com vida mais longa (dias ou semanas) para obter novos tokens de acesso sem exigir que o usuário se autentique novamente.

Use HTTPS Sempre

O JWT não criptografa seu payload. Qualquer pessoa que intercepte o token pode decodificar e ler seu conteúdo. Sempre transmita JWTs por HTTPS para evitar interceptação.

Valide Tudo

Sempre verifique a assinatura, confirme que o token não expirou, verifique se o aud (público) corresponde ao seu aplicativo e rejeite tokens com algoritmos inesperados.

Armazene os Tokens com Segurança

No lado do cliente, armazene JWTs em cookies somente HTTP quando possível, ou na memória para aplicações de página única. Evite localStorage para tokens que fornecem acesso a dados sensíveis.

Conceitos Equivocados Comuns sobre JWT

"JWT é criptografado." — Não. O JWT é assinado, não criptografado. O payload é codificado em base64url, o que é reversível. O JWE (JSON Web Encryption) fornece criptografia, mas é uma especificação separada, não coberta pelo JWT padrão.

"O JWT previne CSRF." — Não por si só. O JWT em um header Authorization ajuda, mas se o token estiver em um cookie, a proteção contra CSRF ainda é necessária.

"JWT serve apenas para autenticação." — O JWT é usado para autenticação, mas também para troca de dados de autorização, sessões sem estado e compartilhamento seguro de informações entre serviços.

Decodifique e Explore JWT Online

Use a ferramenta de decodificador de JWT para inspecionar qualquer JSON Web Token. Cole seu token e veja instantaneamente o header decodificado, o payload e o algoritmo de assinatura. A ferramenta ajuda você a entender quais dados seus tokens carregam e a verificar se eles estão estruturados corretamente.

O que é JWT? Um Guia Completo sobre JSON Web Tokens - CoolTool