O que esta ferramenta faz
Um JSON Web Token (JWT) é a cadeia longa de letras e pontos que muitas APIs e sistemas de login entregam depois que você entra. Esta ferramenta o abre: mostra o cabeçalho e o payload como JSON legível, converte os claims de tempo em datas reais no seu fuso horário e informa se o token expirou. Se o token foi assinado com um segredo compartilhado (HS256, HS384 ou HS512), você pode digitar o segredo para conferir também a assinatura. O token é lido no seu navegador e não é enviado a lugar nenhum, o que importa porque um token válido é uma chave para a conta de alguém.
Decodificar não é verificar
Esta é a coisa mais importante sobre JWT. O cabeçalho e o payload são apenas codificados em Base64URL, não criptografados, então qualquer pessoa com o token consegue lê-los, e qualquer um pode escrever um token com o conteúdo que quiser. Ver "admin": true num token decodificado não prova nada. Só a checagem da assinatura mostra que o token foi criado por quem conhece o segredo ou a chave privada e que não foi alterado depois. Os servidores devem verificar a assinatura em toda requisição e decidir por conta própria quais algoritmos aceitam, nunca confiando no campo alg do token; um token com alg: none não tem assinatura e é um ataque clássico.
As três partes
Um token é formado por três cadeias Base64URL unidas por pontos: cabeçalho.payload.assinatura. No token de exemplo mais conhecido, o cabeçalho é {"alg":"HS256","typ":"JWT"} e o payload é {"sub":"1234567890","name":"John Doe","iat":1516239022}. A assinatura é um HMAC de 32 bytes das duas primeiras partes. Dá para conferir aqui: com o segredo your-256-bit-secret o exemplo é validado e com qualquer outro não. Clique em Exemplo para testar.
Lendo as datas
Três claims guardam tempos, todos como número de segundos desde 1º de janeiro de 1970 UTC:
- exp é quando o token deixa de valer. A partir desse instante ele deve ser recusado.
- nbf (not before) é quando ele passa a valer.
- iat (issued at) é quando foi criado.
A ferramenta mostra cada um como data no seu fuso, como ISO 8601 em UTC e em forma relativa, como "há 3 dias". Com iat 1516239022 e exp 1516242622, as datas são 18 de janeiro de 2018, 01:30:22 e 02:30:22 UTC, ou seja, o token durou uma hora. Um erro comum é gravar exp em milissegundos: aí ele fica dezenas de milhares de anos no futuro. Se um claim não for um número de segundos válido, a ferramenta avisa em vez de mostrar uma data errada.
Conferindo a assinatura
Em HS256, HS384 e HS512 a assinatura é um HMAC com SHA-256, SHA-384 ou SHA-512 sobre cabeçalho.payload, usando o segredo. Digite o segredo, ou marque que ele está em Base64URL se o seu sistema o guarda assim. A conferência usa o Web Crypto do navegador e o segredo não sai da página. Tokens RS256, ES256 e semelhantes usam chave privada e são conferidos com chave pública, o que esta ferramenta não faz; ela avisa em vez de adivinhar.