Neste artigo
O que é um JWT?
Um JWT (JSON Web Token) é um formato de token compacto e seguro para URL usado para transmitir informações com segurança entre partes como um objeto JSON. Definido pelo RFC 7519, os JWTs são o padrão de fato para autenticação e autorização em aplicações web modernas e APIs.
Os JWTs são autossuficientes — eles carregam todas as informações necessárias para verificar a autenticidade do token e extrair declarações do usuário sem consultar um banco de dados. Isso os torna ideais para autenticação sem estado em sistemas distribuídos e arquiteturas de microsserviços.
Estrutura do JWT
Um JWT consiste em três partes codificadas em Base64URL separadas por pontos: header.payload.signature.
- Header — um objeto JSON especificando o tipo de token (JWT) e o algoritmo de assinatura (por exemplo, HS256, RS256, ES256)
- Payload — um objeto JSON contendo declarações: declarações registradas (iss, sub, exp, iat), declarações públicas e privadas
- Signature — criada assinando o header e o payload codificados com uma chave secreta (HMAC) ou uma chave privada (RSA/ECDSA)
Experimente gratuitamente — sem cadastro
Validar um JWT →Como funciona a validação JWT
A validação de JWT envolve verificações estruturais, verificação de assinatura e validação de declarações.
- Verificação de estrutura — o token deve conter exatamente três segmentos codificados em Base64URL separados por dois pontos
- Validação do header — o header deve conter campos typ e alg válidos. O algoritmo deve corresponder ao que o servidor espera
- Verificação de assinatura — a assinatura é recalculada usando o header, o payload e a chave de assinatura. Se a assinatura recalculada corresponder, o token não foi adulterado
- Validação de declarações — as declarações exp (expiração), nbf (não antes de) e iss (emissor) são verificadas em relação à hora atual e aos valores esperados
Casos de uso comuns
Os JWTs impulsionam a autenticação e autorização em toda a pilha web moderna.
- Autenticação de API — os clientes incluem JWTs nos cabeçalhos de Autorização (esquema Bearer) para autenticar requisições de API sem sessões
- Login único (SSO) — provedores de identidade emitem JWTs que múltiplas aplicações aceitam, possibilitando autenticação fluida entre aplicações
- Tokens de acesso OAuth 2.0 — muitas implementações de OAuth usam JWTs como tokens de acesso, codificando escopos e permissões diretamente no token
- Comunicação entre microsserviços — os serviços passam JWTs para propagar o contexto do usuário e as decisões de autorização entre os limites de serviço
Melhores práticas de segurança JWT
Os JWTs são poderosos, mas requerem tratamento cuidadoso para evitar armadilhas comuns de segurança.
- Sempre valide o algoritmo — nunca permita que o campo alg do token dite qual algoritmo seu servidor usa. Isso evita o ataque do algoritmo 'none'
- Defina tempos de expiração curtos — os JWTs não podem ser revogados depois de emitidos. Mantenha os tempos exp curtos (15 minutos para tokens de acesso) e use refresh tokens para sessões de longa duração
- Use algoritmos assimétricos para sistemas distribuídos — RS256 ou ES256 permitem que os serviços verifiquem tokens sem compartilhar o segredo de assinatura
- Nunca armazene dados sensíveis no payload — os JWTs são codificados, não criptografados. Qualquer pessoa pode decodificar o payload. Mantenha os segredos no seu banco de dados, não no token
Perguntas frequentes
Um JWT pode ser decodificado sem a chave secreta?
Sim. Os payloads de JWT são codificados em Base64URL, não criptografados. Qualquer pessoa pode decodificar e ler o header e o payload. A chave secreta só é necessária para verificar a assinatura — para confirmar que o token não foi alterado.
Qual é a diferença entre JWS e JWE?
JWS (JSON Web Signature) é o que a maioria das pessoas entende por JWT — um token assinado. JWE (JSON Web Encryption) é um token criptografado onde o payload não pode ser lido sem a chave de descriptografia. A maioria dos JWTs são tokens JWS.
Devo armazenar JWTs no localStorage ou em cookies?
Os cookies HttpOnly são mais seguros porque não são acessíveis via JavaScript (prevenindo o roubo por XSS). O localStorage é vulnerável a ataques XSS. Para aplicações sensíveis, use cookies HttpOnly Secure SameSite.