UltKit

Decodificador JWT

Cole um JSON Web Token e leia o header e o payload como JSON formatado, com os horários de expiração e de emissão exibidos como datas e uma indicação de que o token está válido ou não neste momento. A decodificação acontece inteiramente no seu navegador, o que faz diferença quando o token é uma credencial ativa.

0 caracteres · 0 palavras · 0 linhas

0 caracteres · 0 palavras · 0 linhas

Funciona inteiramente nesta aba do navegador. Seu texto nunca é enviado nem armazenado.

Claims registradas

Os sete nomes de claim definidos na RFC 7519 §4.1. Todas são opcionais; os horários são segundos desde 1970-01-01 UTC.

ClaimSignificado
issEmissor: quem criou e assinou o token
subAssunto: o usuário ou a entidade a que o token se refere
audPúblico: a quem o token se destina
expExpiração: rejeitar o token depois deste momento
nbfNão antes de: rejeitar o token antes deste momento
iatEmitido em: quando o token foi criado
jtiID do JWT: identificador único, usado para evitar reutilização (replay)

Valores comuns de alg

Valor de algSignificado
HS256HMAC com SHA-256; um único segredo compartilhado assina e verifica
RS256Assinatura RSA PKCS#1 v1.5 com SHA-256; a chave privada assina, a pública verifica
PS256RSA-PSS com SHA-256
ES256ECDSA na curva P-256 com SHA-256; assinaturas curtas
EdDSAAssinaturas Ed25519 ou Ed448
noneToken sem assinatura; os servidores devem rejeitá-lo

O que há dentro de um JSON Web Token

O JWT é definido na RFC 7519 (maio de 2015), que sugere pronunciá-lo como a palavra inglesa "jot". A forma assinada mais comum são três strings Base64url unidas por pontos: header.payload.signature. O header indica o algoritmo de assinatura em alg, como HS256 ou RS256, e muitas vezes um ID de chave em kid. O payload contém as claims, campos JSON como sub (o usuário), iss (o emissor), aud (o público-alvo) e exp, nbf e iat, que são horários em segundos desde 1º de janeiro de 1970 UTC. O decodificador converte essas três para o seu horário local e para ISO 8601, e informa se o token expirou, ainda não é válido ou está dentro do período de validade.

Base64url é uma codificação, não uma criptografia, então qualquer pessoa com um token pode ler o payload exatamente como esta página faz. Nunca coloque senhas, números de cartão ou outros segredos nas claims. Um token com cinco partes separadas por pontos é um JWE, um token criptografado; o conteúdo não pode ser lido sem a chave, e o decodificador avisa isso. Um "Bearer " no início, copiado de um cabeçalho Authorization, é removido automaticamente.

Por que a assinatura não é verificada aqui

A assinatura prova que o header e o payload foram produzidos por quem tem a chave e não foram alterados desde então. Para conferi-la é preciso dessa chave: o segredo compartilhado nos algoritmos HMAC como o HS256, ou a chave pública do emissor no RS256, ES256 ou EdDSA. Colar o segredo de assinatura de produção em qualquer página web é má ideia, e um decodificador que fingisse atestar um token sem a chave daria uma falsa sensação de segurança, então esta ferramenta mostra a assinatura, mas não a verifica. Trate o que você vê como uma afirmação feita pelo token, não como um fato.

A verificação deve ser feita no seu servidor, com uma biblioteca mantida e o algoritmo esperado fixado. Dois erros históricos explicam o motivo: aceitar alg "none", que permite a qualquer pessoa forjar um token sem assinatura, e a confusão de algoritmo, em que um servidor que espera RS256 é induzido a conferir uma assinatura HS256 usando a chave pública como segredo HMAC. O decodificador serve para depuração: ver quais claims um provedor emite, notar um público-alvo errado ou descobrir que uma sessão falhou porque o exp passou há um minuto. Para ler os segmentos Base64url em estado bruto, use o decodificador de Base64.

Perguntas frequentes

É seguro colar um token de acesso real em um decodificador JWT?
Nesta página o token nunca sai do seu navegador. Ainda assim, um token válido funciona como uma senha até expirar, então prefira tokens expirados ou de teste e não deixe os ativos em capturas de tela e conversas.
Por que meu token aparece como expirado se acabou de ser emitido?
Verifique primeiro o relógio do seu dispositivo. Alguns emissores dão aos tokens de acesso uma vida de apenas alguns minutos, e um token copiado de um log pode ser mais antigo do que parece. Um exp escrito em milissegundos em vez de segundos faz o contrário e cai milhares de anos no futuro.
Alguém pode alterar o payload do meu JWT?
Elas podem editar e recodificar o token, mas a assinatura deixará de corresponder. Um servidor que verifica assinaturas com a chave e o algoritmo corretos rejeita o token alterado.
Qual é a diferença entre JWS e JWE?
Um JWS (RFC 7515) é assinado, tem três partes e qualquer pessoa pode lê-lo. Um JWE (RFC 7516) é criptografado, tem cinco partes e só quem tem a chave pode ler o payload.
Fazer logout invalida um JWT?
Não por si só. Um JWT assinado continua válido até o exp, a menos que o servidor mantenha uma lista de bloqueio ou consulte um registro de sessão, e por isso os tokens de acesso costumam ter vida curta.