Decodificador de JWT

Roda no seu navegador; nada é enviado

Leia o header e os claims de um JSON Web Token, veja quando ele expira e confira a assinatura com seu segredo ou sua chave pública.

Token

Verify signature

Paste a token to check its signature against a secret or public key.

No token yet

The header and payload appear here as JSON, and Claims lists each claim with what it means and when it expires.
Ready

O que é um JWT?

Um JSON Web Token (JWT) é uma forma compacta e assinada de passar claims entre duas partes, quase sempre de um servidor de autenticação para uma API. São três strings Base64url unidas por pontos, header.payload.signature, e as APIs costumam esperá-lo no header Authorization: Bearer <token>.

O header diz como o token é assinado, por exemplo "alg": "HS256" para um HMAC com segredo compartilhado ou RS256 para um par de chaves RSA. O payload guarda os claims: os padrão, como sub (a quem o token se refere), iat (quando foi emitido) e exp (quando expira), mais o que o emissor adicionar, como papéis ou scopes.

A assinatura é o que torna um token confiável. O emissor a calcula sobre o header e o payload com a chave dele, então mudar um único caractere do payload a quebra. O payload é codificado, não criptografado: qualquer pessoa com o token consegue ler todos os claims, então nunca coloque segredos nele e trate o próprio token como uma senha até ele expirar.

Como usar esta ferramenta

  1. 1Cole um token no painel Token ou escolha um em Examples. O prefixo Bearer, o nome de header Authorization:, aspas e quebras de linha são ignorados, e o cabeçalho do painel diz o que foi ignorado.
  2. 2O header, o payload e a assinatura ficam coloridos dentro do token. Payload e Header mostram cada parte como JSON; Claims lista cada claim com o significado e mostra iat, nbf e exp como datas no seu fuso horário, com quanto tempo passou ou falta.
  3. 3A barra de status mostra o algoritmo, quando o token expira ou expirou e se a assinatura foi conferida. Avisos como alg: none ou a falta de exp aparecem no topo de Claims.
  4. 4Para conferir a assinatura, digite o segredo compartilhado (HS256, HS384, HS512; mude para Base64 se o segredo estiver codificado) ou cole a chave pública do emissor (RS*, PS*, ES*, EdDSA) como PEM, certificado X.509, JWK ou conjunto de JWKs. O resultado aparece enquanto você digita.
  5. 5Se o token não puder ser decodificado, a mensagem diz qual parte e qual caractere estão errados; pressione F8 para selecioná-lo.

Solução de problemas

Este token tem 5 partes: é um JWE criptografado
Alguns provedores de identidade emitem tokens criptografados (JWE). O payload deles só pode ser lido com a chave privada do destinatário, então nenhum decodificador consegue mostrá-lo sem essa chave.
+ é Base64 padrão; JWTs usam Base64url
O token foi recodificado ou montado à mão com Base64 padrão. As partes de um JWT usam - e _ em vez de + e /, sem preenchimento =.
A assinatura não bate com este segredo
Confira se o segredo é exatamente o que o emissor usa, incluindo maiúsculas e minúsculas e espaços no final, e se ele está guardado em Base64; nesse caso, mude o formato do segredo para Base64.
Esta é uma chave RSA PKCS#1 (BEGIN RSA PUBLIC KEY)
Os navegadores só importam chaves no formato SubjectPublicKeyInfo. Converta com openssl rsa -RSAPublicKey_in -in key.pem -pubout, ou cole no lugar o JWK do endpoint JWKS do emissor.
O conjunto de chaves não tem nenhuma com este kid
Os emissores fazem rotação de chaves. Busque o conjunto de JWKs atual no jwks_uri do emissor e cole de novo; a ferramenta escolhe a chave cujo kid bate com o header do token.

Perguntas frequentes

É seguro colar aqui um token ou segredo real?

A decodificação e a verificação da assinatura rodam no seu navegador com Web Crypto, e nada é enviado a lugar nenhum. O token fica no session storage desta aba até você limpar ou fechar a aba, então recarregar não apaga nada; o segredo ou a chave usados na verificação nunca são salvos, e tokens nunca vão para links. Mesmo assim, um token válido dá acesso até expirar, então prefira tokens de teste ou expirados, e nunca cole segredos de assinatura de produção num site que você não controla.

O que significa "Signature verified"?

Que o header e o payload foram assinados com o segredo, ou com a chave privada que corresponde à chave pública que você informou. Isso não diz que o token é aceitável: sua API também precisa conferir exp, nbf, o emissor (iss) e o público (aud), e decidir quais algoritmos aceita.

Por que alg none é perigoso?

Um token com "alg": "none" não tem assinatura, então qualquer pessoa pode escrever um com os claims que quiser. Bibliotecas que o aceitam por engano deixam atacantes forjarem tokens. Os servidores devem rejeitar tokens sem assinatura.

Em que formato estão iat, nbf e exp?

Em segundos desde 1º de janeiro de 1970 UTC (tempo Unix). Um valor de 13 dígitos está em milissegundos, um bug comum em emissores de tokens; a ferramenta avisa. O conversor de timestamp Unix transforma qualquer um deles numa data.

Por que meu token é rejeitado se ele decodifica sem problema?

As causas comuns são uma assinatura feita com outra chave, um aud ou iss errado, um token usado antes do nbf ou depois do exp, ou relógios diferentes entre servidores. Leia a resposta de erro da API e compare esses claims.