Decodifique o payload JWT sem verificar a assinatura
Este decodificador de JWT separa um JSON Web Token em seus três segmentos compactos e lê o JSON codificado em base64url no cabeçalho e no payload.
Executar grátis
Ele devolve as duas partes como objetos estruturados, facilitando a inspeção ou o encaminhamento de claims, identificadores, timestamps, emissores, públicos e metadados do algoritmo. A assinatura não é verificada de propósito; portanto, os valores decodificados mostram o que o token declara, não quem o criou. Use o resultado em depuração, desenvolvimento, documentação e inspeções cuidadosas, nunca como prova de autenticidade ou autorização do token.
Entenda o que a decodificação comprova e o que não comprova
Um JWT costuma conter cabeçalho, payload e assinatura, unidos por pontos. Os dois primeiros segmentos são JSON codificado em base64url. Isso significa que o conteúdo foi preparado para transporte compacto, mas não está criptografado nem oculto. Esta capacidade divide o token informado, decodifica esses dois segmentos como UTF-8, analisa o JSON e devolve os objetos resultantes de cabeçalho e payload. O terceiro segmento não é usado para autenticar nada. Essa distinção é essencial, pois qualquer pessoa pode criar uma sequência com formato de token e claims arbitrárias. Encontrar um sujeito, uma função, um emissor, um público ou uma expiração no payload decodificado não prova que um sistema confiável emitiu o token. Use a decodificação para visualizar a estrutura, diagnosticar nomes ou valores de claims ou obter uma representação legível durante o desenvolvimento. Quando uma decisão de segurança depender do token, use uma biblioteca de verificação JWT apropriada com chave explicitamente confiável e restrições de algoritmo, emissor e público.
Envie um JWT compacto e interprete a resposta
Cole ou envie o JWT compacto completo no campo token. Um token estruturalmente válido tem exatamente três segmentos separados por dois pontos, embora este decodificador leia apenas os dois primeiros. A resposta contém um objeto header e um objeto payload. Campos comuns do cabeçalho incluem typ, que geralmente identifica o tipo de mídia JWT, e alg, que informa o suposto algoritmo de assinatura. Campos comuns do payload incluem sub para sujeito, iss para emissor, aud para público, exp para expiração e claims específicas do aplicativo. Este decodificador não exige nenhuma claim; ele preserva os valores JSON presentes. Claims NumericDate como exp, nbf e iat continuam sendo números, sem conversão em datas, evitando suposições sobre como você pretende exibi-las ou compará-las. Se o token tiver quantidade incorreta de segmentos, base64url malformado, UTF-8 ou JSON inválido, ou uma seção decodificada que não seja objeto, a solicitação retornará um erro de entrada inválida em vez de um resultado parcial.
Use claims decodificadas com segurança no desenvolvimento
A decodificação é especialmente útil na fronteira entre sistemas. Uma pessoa que desenvolve uma API pode comparar as claims produzidas por um provedor de identidade com os nomes esperados pelo aplicativo. A equipe de suporte pode inspecionar um token de teste com dados ocultados para descobrir se falta um público ou escopo. Uma suíte de testes pode decodificar tokens criados por uma fixture local e confirmar a inclusão das claims personalizadas antes de testar a verificação criptográfica separadamente. Mantenha o limite de segurança explícito em todo fluxo: dados decodificados são entradas não confiáveis. Não conceda acesso, selecione um tenant, aceite uma identidade nem exponha dados privados apenas porque uma claim decodificada solicita isso. Evite colar tokens bearer reais em logs, tickets, chats ou documentos compartilhados, pois um JWT pode ser uma credencial ativa mesmo quando seu payload parece inofensivo. Prefira exemplos sintéticos, expirados ou gerados localmente para diagnóstico. Se uma automação precisar processar tokens reais, envie-os somente por um canal devidamente protegido e faça a verificação usando configurações confiáveis após a decodificação.
Casos de uso
Depurar claims do provedor de identidade
Inspecione o formato do cabeçalho e do payload para comparar nomes de claims, públicos, escopos e identificadores emitidos com a configuração do aplicativo.
Conferir tokens de teste locais
Decodifique tokens de fixture em testes ou scripts de desenvolvimento e confirme as claims personalizadas esperadas antes de verificar a assinatura separadamente.
Explicar a estrutura do token
Transforme um JWT compacto em objetos JSON legíveis para documentação técnica, treinamento ou diagnóstico com exemplos sintéticos e devidamente ocultados.
Perguntas frequentes
Esta ferramenta verifica a assinatura do JWT?
Não. Ela apenas decodifica o cabeçalho e o payload. Trate todos os campos retornados como não confiáveis até um verificador validar a assinatura e as claims exigidas.
Quanto custa?
O preço da API é US$ 0,002 por solicitação. A versão para navegador pode executar localmente a mesma lógica determinística de decodificação.
Por que o token precisa ter três segmentos?
A serialização compacta de JWT contém cabeçalho, payload e assinatura separados por pontos. Esta capacidade rejeita sequências sem exatamente essa estrutura.
Os timestamps de expiração são convertidos em datas?
Não. Valores como exp, nbf e iat são devolvidos exatamente como representados no payload, para que você os interprete conforme seus requisitos.
Posso decodificar um JWT sem assinatura?
Um token compacto ainda precisa de três segmentos, então um token não protegido pode ter o terceiro vazio. Cabeçalho e payload são decodificados, sem qualquer conclusão de segurança.
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/web/jwt-decode \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.c2lnbmF0dXJl"}'const res = await fetch("https://api.kit.forhosting.com/web/jwt-decode", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.c2lnbmF0dXJl"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/web/jwt-decode",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.c2lnbmF0dXJl"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/web/jwt-decode", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.c2lnbmF0dXJl"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.c2lnbmF0dXJl"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/web/jwt-decode", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemplo de requisição
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.c2lnbmF0dXJl"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.jwt_decode",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Limites
timeout_sec | 30 |
max_crawl_pages | 25 |
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |