search

Found

info Visão geral

Verifique a assinatura de um JWT recalculando o HS256. HMAC-SHA-256 sobre header.payload, comparado em base64url em 3 estados — RS256/ES256 não.

📘 Como usar

  1. Cole o JWT no formato header.payload.signature
  2. Informe o segredo HMAC compartilhado usado para assiná-lo
  3. Leia a verificação como válida, divergente ou alg não suportado

Verificador de assinatura JWT HS256

※ Algoritmo: HS256 (HMAC-SHA-256). HMAC de header.payload com o segredo, codificado em base64url

※ Apenas HS256. RS256 / ES256 e outros esquemas de chave pública não são tratados aqui

Verificação da assinatura

Cabeçalho (JSON)
Carga útil (JSON)
Assinatura recalculada (base64url)
Copiado!
Article

Verificador de assinatura JWT HS256 | Confirme a assinatura de um token com seu segredo

Recalcule o HMAC-SHA-256 de header.payload com seu segredo compartilhado e compare o resultado com a terceira parte do token. A verificação de assinatura mostra um de três estados — válida, divergente ou um alg diferente de HS256 — enquanto o cabeçalho e a carga útil são decodificados e exibidos como JSON formatado.

💡 Sobre esta ferramenta

A parte difícil de depurar um JWT não é lê-lo, e sim saber se a assinatura realmente confere. Um decodificador abre os segmentos base64url e mostra os dados, mas uma carga útil decodificada não diz nada sobre a assinatura estar correta: isso exige recalculá-la com o segredo.

Esta ferramenta pega a parte header.payload, executa HMAC-SHA-256 sobre ela com o segredo que você informar, codifica o MAC em base64url e o compara como string com a assinatura no fim do token. Se baterem, mostra válida; qualquer diferença mostra divergente; e um cabeçalho cujo alg não seja HS256 é rejeitado como alg não suportado. Mude um caractere do segredo ou altere a carga útil e o veredito vira, o que facilita isolar qual valor está quebrando a assinatura.

O escopo é apenas HS256 (a família HMAC). RS256 e ES256 são esquemas de chave pública e curva elíptica verificados com um par de chaves em vez de um segredo compartilhado, então ficam de fora desta ferramenta; quando o alg é um desses, você recebe o estado de alg não suportado em vez de um resultado enganoso.

🧐 Perguntas frequentes

P. Qual a diferença para um decodificador? Um decodificador faz a decodificação base64url do cabeçalho e da carga útil e os exibe. Ele nunca recalcula a assinatura. Esta ferramenta executa o HMAC e informa se a assinatura confere.

P. Por que meu token sai como divergente? Quase sempre por segredo trocado, carga útil editada, uma cópia truncada que perdeu os caracteres finais ou um . fora de lugar entre os segmentos. Desfaça uma alteração de cada vez para achar a causa.

P. Qual o formato do segredo? Informe o segredo compartilhado HS256 como a mesma string UTF-8 usada por quem assina. Se sua stack guarda a chave em base64, cole a string exata que o emissor passa como chave em vez de recodificá-la.

P. Ele verifica a expiração (exp)? Não: ele só verifica a igualdade da assinatura. A validação de claims como exp e nbf está fora do escopo, então leia-as você mesmo no JSON da carga útil decodificada.

P. E um token com alg igual a none? Qualquer alg diferente de HS256, incluindo none, retorna alg não suportado. Aceitar none é uma vulnerabilidade conhecida, então os verificadores deveriam recusá-lo de imediato.

📚 Curiosidades

O "HS" de HS256 significa HMAC using SHA-256, e a especificação de algoritmos JWA (RFC 7518, §3.1) o define como o único algoritmo de implementação obrigatória — toda biblioteca JWT em conformidade precisa suportá-lo. Um mesmo segredo compartilhado assina e verifica, o que explica sua popularidade em serviços pequenos, mas significa que emissor e verificador têm a mesma chave: se vazar, qualquer um cria tokens válidos. Um detalhe que costuma passar batido é que a assinatura é calculada sobre o signing input — o cabeçalho e a carga útil unidos por um . —, de modo que o terceiro segmento é um MAC derivado dessa string, e não a carga útil em si.

O JWT e o segredo que você cola permanecem no seu navegador e nunca são enviados a um servidor; o HMAC roda localmente pela API Web Crypto padrão.