Pular para o conteúdo

Inspecionar JWT e assinar ou verificar tokens HMAC

Cole um token ou informe payload e segredo de teste para gerar um. Uma assinatura válida não substitui verificações de emissor, audiência e autorização.

Funciona localmente no seu navegador
Token
Claim checks
Algorithm—
Expiration—
Not before—
Issuer—
Cabeçalho decodificado
Inspect a token to view its header.
Decoded payload
Inspect a token to view its payload.
Verify an HMAC signature

O segredo é usado apenas pela API criptográfica do navegador. O verificador aceita HS256, HS384 e HS512 e não envia o token nem o segredo ao VoriTools.

Inspecione um JWT assinado e informe o segredo HMAC correspondente para verificá-lo.
Gere um JWT HMAC local

Gere apenas tokens HS256, HS384 ou HS512. O payload e o segredo ficam no Web Crypto; esta ferramenta nunca oferece alg: none.

Generate a local HMAC JWT to view it here.

JWT inspection is not authentication

Claims decodificados são dados Base64URL legíveis, não prova de confiança. Verifique algoritmo, validade, issuer e audience e valide a assinatura com uma chave ou segredo confiável antes de aceitar o token.

Como inspecionar e verificar um JWT

Esta página divide um JWT compacto em cabeçalho, payload e assinatura, mostra os claims decodificados e verifica a assinatura quando o token é assinado com HMAC e você informa o segredo. Também gera tokens HS256, HS384 ou HS512 de vida curta a partir de um payload que você digita.

Decodificar e verificar são etapas separadas de propósito. Qualquer pessoa lê o payload de um JWT sem chave, e uma assinatura válida só prova que o token foi assinado com aquela chave; não diz se ele expirou, se foi emitido para o seu serviço ou o que ele permite fazer.

  1. Cole o token no formato header.payload.signature no campo do token e clique em Inspecionar token, ou clique em Carregar exemplo para ver uma amostra assinada.
  2. Leia o cabeçalho decodificado (algoritmo, tipo e kid) e depois o payload decodificado. A faixa de verificações mostra algoritmo, expiração, não antes de e emissor antes do JSON bruto.
  3. Para verificar um token HMAC escolha HS256, HS384 ou HS512 em Algoritmo, informe o segredo compartilhado e clique em Verificar assinatura.
  4. Para criar um token de teste escolha o algoritmo, cole um objeto JSON em Payload, ajuste Expiração em minutos e, se quiser, marque o claim iat; depois clique em Gerar JWT local.
  5. Use Copiar cabeçalho ou Copiar payload para levar o JSON decodificado, e Inspecionar o token gerado para mandar um token recém-criado de volta ao inspetor.

Estrutura do JWT, algoritmos e claims

O que cada uma das três partes contém

O cabeçalho é JSON codificado em Base64URL que normalmente declara alg e typ e, às vezes, um kid que indica ao verificador qual chave usar. O payload é o conjunto de claims: os registrados (iss, sub, aud, exp, nbf, iat, jti) mais os privados que o emissor adiciona. A assinatura é o algoritmo aplicado à string ASCII base64url(header) + "." + base64url(payload) com a chave.

Base64URL é o alfabeto Base64 padrão com + e / trocados por - e _ e sem preenchimento. Por isso um token viaja em URL, cookie ou cabeçalho Authorization sem escapes e, também por isso, remontar o token à mão costuma quebrar a assinatura.

Quais algoritmos esta página verifica

Apenas a família HMAC: HS256, HS384 e HS512, porque um segredo compartilhado basta para recalculá-las. RS256, PS256, ES256 e EdDSA assinam com chave privada e verificam com chave pública, então aqui podem ser decodificados, mas não verificados; para isso você precisa da JWK pública do emissor. Com um token RS256 o botão Verificar assinatura fica desativado e o aviso explica o motivo.

Um token que declara alg como none é marcado em vermelho: nunca deve ser aceito, e um verificador jamais deveria confiar no algoritmo anunciado pelo próprio token sem confrontá-lo com uma lista permitida. Trocar HS256 por RS256 e assinar com a chave pública como se fosse um segredo HMAC é um ataque conhecido contra bibliotecas descuidadas.

Claims que vale conferir antes de aceitar um token

exp precisa estar no futuro e nbf no passado, em segundos desde a época Unix, com alguma folga entre relógios. iat deve ser plausível, não futuro. iss e aud têm de corresponder ao seu serviço; caso contrário, um token emitido para outra aplicação será aceito.

Conferir a assinatura não é autorizar. Papéis, escopos e identificador de locatário ficam em claims privados, e o conjunto de claims de um JWT é assinado, não cifrado: nunca coloque um segredo em um payload que você não mostraria a quem tem o token.

Dúvidas sobre assinatura e claims de JWT

É seguro colar um token nesta página?

A decodificação e a verificação HMAC rodam no seu navegador, então o token não é enviado. Ainda assim, o hábito seguro é testar com tokens descartáveis: um refresh token de produção ou uma credencial de longa duração não deveria ser colada em nenhuma página web, inclusive nesta.

Por que a verificação falha no meu token RS256 ou ES256?

Esses algoritmos são assimétricos e esta página só recalcula assinaturas HMAC. O token ainda pode ser decodificado e seus claims lidos, mas verificá-lo exige a chave pública do emissor e uma biblioteca com suporte a JWA, algo que uma página com apenas um segredo compartilhado não faz corretamente.

A assinatura diz que não é válida. O que isso significa?

Ou o segredo está errado, ou o algoritmo escolhido não é o da cabeçalho, ou o texto do token mudou depois de assinado. Editar o payload, reindentá-lo e recodificá-lo à mão dá o mesmo resultado, porque a assinatura cobre os bytes originais exatos.

Por que consigo ler o payload sem chave?

Porque um JWT é assinado, não cifrado. Base64URL é uma codificação, e quem tem o token decodifica cabeçalho e payload sem chave nenhuma. Se os claims forem sensíveis, use JWE, que cifra o conteúdo para um destinatário.

Qual é a diferença entre JWT, JWS e JWE?

JWT é o conjunto de claims, os dados. JWS é a serialização assinada que produz o token compacto de três partes que esta página inspeciona. JWE é a serialização cifrada, em que o payload é ilegível sem chave e a estrutura tem cinco partes em vez de três.

Quanto tempo deve durar um token de teste gerado?

Minutos, não horas. Defina Expiração em minutos com um valor pequeno para que um token de teste vazado pare de funcionar, e lembre que esta página assina com o segredo digitado localmente, então o token só vale em sistemas que compartilhem esse segredo.

Ferramentas recentes: