tools / jwt
jwt/
Decodifique o header e o payload de um JWT e mostre exp / iat / nbf no horário local. Só decodifica, sem verificar a assinatura.
Token
Horários
Header
Payload
Signature
Perguntas frequentes
Posso confiar no conteúdo decodificado? Esta ferramenta verifica a assinatura?
Não, ela não verifica. Só decodifica o Header e o Payload e nunca confere a assinatura, então uma decodificação bem-sucedida não significa que o token é genuíno ou que não foi modificado. Verificar uma assinatura exige a chave secreta ou pública e deve ser feito no seu back-end, com uma biblioteca JWT. Além disso, o Payload é apenas codificado em base64url, não criptografado, então qualquer pessoa com o token pode lê-lo; não coloque senhas ou outros dados sensíveis nele.
O que significa "número de partes incorreto" ou "este é um JWE"?
Um JWT tem três partes, header.payload.signature, unidas por pontos, e qualquer outra coisa dispara a mensagem de número de partes incorreto. As causas comuns são uma cópia incompleta, texto extra copiado junto, ou algo que não é um JWT, como um ID de sessão ou um token aleatório opaco. Um token com exatamente 5 partes é um JWE, cujo conteúdo é criptografado e, portanto, não pode ser decodificado aqui.
O que fazer com "não é base64url válido" ou "comprimento inválido"?
Significa que uma das partes contém um caractere que não pertence a um JWT, ou foi cortada. A mensagem indica a parte e, para um caractere inválido, aponta qual é. O JWT usa base64url, que tem apenas letras, dígitos, - e _, e um = no final é opcional. A causa mais comum é uma aspa no início do token; um + ou / indica que foi usado Base64 comum e que é preciso trocá-los por - e _. Uma cópia truncada costuma gerar "comprimento inválido" ou "não é um JSON válido".
Posso colar um token com prefixo Bearer ou quebras de linha?
Sim. Um Bearer no início é removido automaticamente (sem diferenciar maiúsculas de minúsculas), e espaços, quebras de linha e tabulações dentro do token são ignorados, então um token copiado de um cabeçalho de requisição ou de um log pode ser colado como está. Entradas acima de 1 MB são rejeitadas de imediato; um JWT real costuma ter de algumas centenas de bytes a alguns KB.
O que significam os rótulos "Expirado", "Ainda não válido" e "No futuro"?
Eles vêm de três campos de tempo no Payload. exp é o horário de expiração e "Expirado" aparece depois que ele passa; nbf é o horário de início e "Ainda não válido" aparece antes dele; iat é o horário de emissão, e "No futuro" significa que ele é posterior a agora, o que pode indicar diferença entre o relógio do emissor e o do seu computador. A linha "Status" no topo confere primeiro o nbf, depois o exp, e mostra "Válido" só se os dois estiverem corretos; isso se refere apenas ao tempo e não diz nada sobre a assinatura.
Os horários estão com algumas horas de diferença, ou o tempo restante parece errado. Por quê?
A página usa o fuso horário e o relógio do seu computador, e o fuso aparece depois de cada data, por exemplo UTC+08:00. exp, iat e nbf são timestamps Unix em segundos e não dependem de fuso horário; um fuso diferente só muda como o mesmo instante é exibido. O tempo restante é atualizado a cada segundo e calculado a partir da hora atual do seu computador, então um relógio errado dá resultados errados. Um valor muito grande, como um timestamp de 13 dígitos em milissegundos, recebe uma observação de que o JWT usa segundos, e outros campos de tempo, como auth_time, não são convertidos automaticamente.
Ele decodifica tokens assinados com HS256, RS256, ES256 e outros algoritmos?
Sim, todos. A decodificação só transforma as duas primeiras partes de volta em JSON e não tem relação com o algoritmo de assinatura. O alg do Header aparece ao lado do título e, quando alg é none, é marcado como "sem assinatura". A parte Signature é exibida como o texto original em base64url e não é decodificada.
O token que eu colo é enviado?
Não. A decodificação acontece no seu navegador e a página não faz nenhuma requisição que envie o token para algum lugar. Mesmo assim, um token costuma equivaler a uma credencial de login; por isso, não compartilhe à toa um token ativo ainda válido e não o cole em sites que você não conhece.