Desenvolvedor 🔒 Roda no seu navegador — nenhum dado é enviado

Depurador de JWT

Um 401 com um token que parece certo quase sempre é uma de seis coisas. Esta página mostra o token do jeito que o servidor o lê, para você descobrir qual delas é.

Token JWT
Segredo ou chave pública
A chave é usada no seu navegador e nunca é enviada a lugar nenhum.
Decodificado
Cabeçalho

          
        
Payload

        
Assinatura

Assine um token seu para testar um endpoint. Tudo é calculado nesta página.

Chave de assinatura

A chave e o token pronto ficam no seu navegador: nada é enviado a lugar nenhum e nada disso vai em um link compartilhado.

Depurar um JSON Web Token que está sendo recusado

Tokens falham de poucas maneiras, e nenhuma delas é visível no token em si — são três pedaços de Base64URL com pontos no meio. Cole aqui e ele vira algo com que se pode discutir: cada campo do cabeçalho e cada claim, numa tabela que diz para que servem, com a expiração traduzida em palavras claras e a assinatura conferida contra a chave que você tiver.

Ele é decodificado enquanto você digita, e nada é enviado a lugar nenhum. Numa página assim isso merece ser dito sem rodeios, porque o que você está prestes a colar é uma credencial em funcionamento da conta de alguém.

As seis falhas, na ordem que vale a pena

O que deu erradoComo aparece aquiCorreção
ExpiradoA linha acima do cabeçalho diz "Expirou…"Renove o token; se for questão de segundos, confira os relógios
Audiência erradaaud nomeia outra APIPeça o token para a audiência que a API espera
Emissor erradoiss é a URL de staging, não a de produçãoAponte o cliente para o emissor certo, ou a API para o dela
Chave erradaVerificar diz que a assinatura não confereUse a chave com que o emissor assinou; cuidado com segredos em Base64
Algoritmo erradoO cabeçalho diz ES256 e a sua chave é RSACombine a chave com o algoritmo mostrado ao lado do campo da chave
Não é um JWSA página o chama de JWE, com cinco partesO conteúdo está criptografado; leia onde estiver a chave de descriptografia

A ordem importa. Expiração e audiência não exigem chave nem a colaboração de ninguém, então saem do caminho em segundos; perseguir um problema de assinatura que acaba sendo um aud trocado é como uma tarde inteira some.

Ler não é verificar

É esta a distinção que pega as pessoas. Decodificar diz o que um token afirma; não diz nada sobre isso ser verdade, porque o cabeçalho e o payload estão codificados, não criptografados, e qualquer um pode escrever os seus. Verificar é recalcular a assinatura com o segredo ou a chave pública do emissor — o que esta página faz no seu navegador — e é o único passo que transforma uma afirmação em fato.

Use então a visão decodificada para formar uma hipótese e o botão Verificar para testá-la, e nunca deixe uma decisão de autorização no seu próprio código se apoiar em conteúdo decodificado. A aba Código imprime a verificação do lado do servidor em oito linguagens exatamente por isso. Se o que confunde é a codificação em si, a diferença entre Base64 e Base64URL explica por que um segmento de JWT não pode ser simplesmente colado num decodificador Base64 comum.

Coisas que parecem problemas do token e não são

  • A palavra Bearer copiada junto com o token, ou uma quebra de linha vinda do terminal — os dois mudam a entrada assinada e quebram a assinatura.
  • Um token cortado por um visualizador de logs. O segmento da assinatura tem tamanho fixo por algoritmo, então um truncado falha sempre.
  • Dois serviços que dividem um segredo e um deles o guarda em Base64. Marque O segredo está em Base64 para reproduzir esse lado.
  • Um kid que não existe mais porque o emissor girou as chaves; o token está bom, o conjunto de chaves é que está velho.

Descartado o token, os suspeitos restantes estão no servidor: um middleware que nunca valida, um relógio que desliza, um cache com um conjunto de chaves antigo. Se você precisa de um token num estado conhecido para testar qualquer disso — expirado, válido, assinado com uma chave sua —, o gerador de JWT monta um, e o verificador de expiração explica como um verificador lê as claims de tempo.

Guias relacionados