Decodificador JWT
Decodifica e inspeciona JSON Web Tokens
Token JWT
O que é um JWT (JSON Web Token)?
Um JSON Web Token (JWT) é um formato de token compacto e seguro para URLs, definido na RFC 7519. Ele codifica um conjunto de claims como um objeto JSON, depois o assina — e opcionalmente o criptografa — para que o destinatário possa verificar que os dados não foram adulterados. JWTs são o padrão de fato para autenticação sem estado em REST APIs, sistemas de single sign-on e autorização de microsserviços.
Anatomia do JWT: Cabeçalho · Payload · Assinatura
Todo JWT é composto por três segmentos codificados em base64url separados por pontos. O cabeçalho e o payload são JSON simples — legíveis por qualquer pessoa — enquanto a assinatura é um valor criptográfico que só pode ser verificado com a chave correta.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyMTIzIiwibmFtZSI6IkFsaWNlIiwicm9sZSI6ImFkbWluIiwiaWF0IjoxNzE3MjAwMDAwLCJleHAiOjE3MTcyMDM2MDB9.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
{
"alg": "HS256",
"typ": "JWT"
}{
"sub": "user123",
"name": "Alice",
"role": "admin",
"iat": 1717200000,
"exp": 1717203600
}Por que usar um decodificador de JWT?
JWTs brutos parecem texto aleatório. Esta ferramenta renderiza instantaneamente o cabeçalho e o payload como JSON formatado para que você possa inspecionar claims, verificar tempos de expiração e auditar escolhas de algoritmos sem escrever uma única linha de código.
Referência de claims padrão do JWT
A RFC 7519 define sete nomes de claims registrados. Eles não são obrigatórios, mas seu uso é fortemente recomendado para interoperabilidade. Você pode adicionar qualquer claim personalizado ao payload.
| Claim | Descrição | Tipo |
|---|---|---|
| iss | Emissor — Identifica quem emitiu o token — ex.: a URL do seu servidor de autenticação ou o nome da aplicação. | string |
| sub | Sujeito — Identifica o principal sobre o qual o JWT trata — tipicamente um ID de usuário ou conta de serviço. | string |
| aud | Audiência — Identifica os destinatários pretendidos. A parte receptora deve verificar se isso corresponde ao seu identificador. | string | string[] |
| exp | Tempo de expiração — Timestamp Unix após o qual o token não deve ser aceito. Sempre defina isso para limitar o dano causado por um token roubado. | number |
| nbf | Não antes de — Timestamp Unix antes do qual o token não deve ser aceito. Útil para programar tokens com data futura. | number |
| iat | Emitido em — Timestamp Unix em que o token foi emitido. Usado para calcular a idade do token. | number |
| jti | JWT ID — Um identificador único para o token. Permite revogação armazenando e verificando valores JTI usados no lado do servidor. | string |
Algoritmos de assinatura JWT
O claim de cabeçalho alg declara qual algoritmo assinou o token. A escolha afeta a segurança, o desempenho e se serviços de terceiros podem verificar tokens sem a chave privada.
| Algoritmo | Família | Tipo de chave | Observações |
|---|---|---|---|
| HS256 | HMAC | Symmetric | Mais comum. Segredo compartilhado — qualquer pessoa com o segredo pode assinar e verificar. |
| HS384 | HMAC | Symmetric | Variante HMAC mais robusta; custo de desempenho moderado. |
| HS512 | HMAC | Symmetric | Variante HMAC mais forte. |
| RS256 | RSA | Asymmetric | Algoritmo assimétrico mais usado (Google, Auth0, Okta). A chave pública verifica sem precisar da privada. |
| RS384 | RSA | Asymmetric | Variante RS de maior segurança. |
| RS512 | RSA | Asymmetric | Variante RS mais forte. |
| ES256 | ECDSA | Asymmetric | Curva elíptica — assinaturas menores que RSA, popular em mobile e IoT. |
| PS256 | RSA-PSS | Asymmetric | RSA-PSS: mais moderno e seguro do que RS256 baseado em PKCS1v1.5. |
| none | — | — | Sem assinatura — criticamente perigoso. Nunca aceite tokens com alg: none em produção. |
Considerações de segurança
Decodificar um JWT é sempre seguro. Confiar em um JWT sem verificação adequada da assinatura não é. Tenha estas regras em mente sempre que consumir tokens na sua aplicação.
- –Decodificar e inspecionar um JWT nas ferramentas de desenvolvedor ou nesta ferramenta
- –Usar exp, iat e nbf para entender o tempo de vida do token
- –Registrar claims do payload para depuração (omitir PII sensível)
- –Ler o cabeçalho alg para entender como o token foi assinado
- –Confiar em claims do payload sem verificar a assinatura no lado do servidor
- –Aceitar tokens com alg: none — isso significa que não há assinatura alguma
- –Armazenar tokens de acesso em localStorage em aplicações de alta segurança (prefira cookies httpOnly)
- –Definir exp muito no futuro para tokens que carregam permissões sensíveis
Casos de uso comuns
Decodificando JWT em código
O cabeçalho e o payload são codificados em base64url — basta reverter a codificação. Base64url substitui + por - e / por _, e omite o preenchimento =. Apenas a assinatura requer a chave secreta.
function decodeJWT(token) {
const [, payload] = token.split('.')
const json = atob(payload.replace(/-/g, '+').replace(/_/g, '/'))
return JSON.parse(json)
}const [, payload] = token.split('.')
const decoded = JSON.parse(
Buffer.from(payload, 'base64url').toString()
)import base64, json
def decode_jwt(token):
payload = token.split('.')[1]
padding = '=' * (-len(payload) % 4)
return json.loads(base64.urlsafe_b64decode(payload + padding))TOKEN="eyJhbGc..." echo $TOKEN | cut -d. -f2 | base64 -d 2>/dev/null | jq .