O que é um JWT? Uma explicação completa dos tokens JSON Web
Resposta rápida
Um JWT é uma string com três partes codificadas em Base64URL separadas por pontos: header.payload.signature. O cabeçalho especifica o algoritmo, a carga contém declarações (ID do usuário, funções, expiração) e a assinatura prova a autenticidade. JWTs são usados para autenticação sem estado. Use nosso decodificador JWT gratuito para inspecionar o conteúdo do token em seu navegador.
Introdução
Um JWT (JSON Web Token) é um formato de token compacto e seguro para URL definido pela RFC 7519 para transmitir informações com segurança entre as partes como um objeto JSON. JWTs são amplamente usados para autenticação e autorização em aplicações web: depois que um usuário faz login, o servidor emite um JWT que o cliente inclui em solicitações subsequentes para provar a identidade. JWTs não têm estado — o servidor não precisa procurar o token em um banco de dados; o próprio token contém as reivindicações do usuário e uma assinatura provando que não foi adulterado.
Passo a passo
-
Entenda a estrutura de três partes
Um JWT tem três partes: cabeçalho (algoritmo e tipo), carga útil (declarações) e assinatura (prova integridade). Cada parte é codificada em Base64URL e separada por pontos: eyJhbGciOi...J9.eyJzdWIi...J9.signature. As duas primeiras partes podem ser lidas por qualquer pessoa com o token; apenas a assinatura requer a chave secreta.
-
Aprenda as reivindicações padrão
A carga útil contém declarações – declarações sobre o assunto. Declarações padrão: 'sub' (ID do sujeito/usuário), 'iat' (emitido no carimbo de data e hora), 'exp' (expiração), 'nbf' (não antes), 'iss' (emissor), 'aud' (público). As declarações personalizadas podem incluir funções, permissões ou quaisquer outros dados.
-
Compreender algoritmos de assinatura
JWTs usam assinatura simétrica (HS256 — segredo compartilhado) ou assimétrica (RS256, ES256 — par de chaves pública/privada). A assinatura evita adulterações: alterar qualquer parte do token invalida a assinatura. Somente o detentor da chave secreta/privada pode criar tokens válidos.
-
Use JWTs para autenticação
Após o login, o servidor cria um JWT e o envia ao cliente. O cliente inclui JWT no cabeçalho de autorização (token de portador) para solicitações subsequentes. O servidor verifica a assinatura e a expiração — não é necessária nenhuma pesquisa no banco de dados.
Exemplos
JWT estrutura
Entrada: Um típico JWT
Saída: eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyMSIsImV4cCI6MTY5MzYxMjgwMH0.signature
Cabeçalho decodificado
Entrada: Primeira parte decodificada
Saída: {"alg": "HS256", "typ": "JWT"}
Carga útil decodificada
Entrada: Segunda parte decodificada
Saída: {"sub": "user1", "name": "Alice", "iat": 1693526400, "exp": 1693612800}
Problemas comuns
- Decodificação versus verificação —decodificar um JWT (lendo seu conteúdo) NÃO prova que ele é autêntico. Sempre verifique a assinatura do lado do servidor com a chave secreta antes de confiar nas declarações.
- Armazenar JWTs em localStorage — isso os torna acessíveis ao JavaScript, vulneráveis a ataques XSS. Armazene em cookies httpOnly para melhor segurança.
- Tokens de longa duração — se um token for roubado, ele permanecerá válido até expirar. Use tokens de acesso de curta duração (15 a 60 minutos) com tokens de atualização para sessões longas.
- Dados confidenciais na carga útil — a carga útil pode ser lida por qualquer pessoa com o token (é Base64, não criptografado). Nunca coloque senhas, cartões de crédito ou segredos na carga útil.
Dicas
- Sempre verifique a assinatura JWT do lado do servidor antes de confiar em qualquer declaração – a decodificação por si só não é autenticação.
- Use tokens de acesso de curta duração (15 a 60 minutos) com tokens de atualização para sessões longas para minimizar os danos causados pelo roubo de tokens.
- Armazene JWTs em cookies httpOnly, Secure, SameSite em vez de localStorage para evitar ataques XSS.
- Use nosso decodificador JWT para inspecionar o conteúdo do token para depuração - seu token nunca sai do seu navegador.