Um JSON Web Token parece uma parede de caracteres aleatórios, mas são apenas três pedaços de JSON codificado. Este guia explica o que cada peça contém, como ler as declarações padrão e a diferença crucial entre decodificar um token (seguro, o que esta ferramenta faz) e verificá-lo (precisa de um segredo, o que um servidor faz).

As três partes de um token

Divida um JWT em pontos e você obterá cabeçalho.payload.signature. O cabeçalho é um pequeno objeto JSON que descreve como o token foi assinado — seu alg (algoritmo) e typ (tipo). A carga útil é a parte interessante: um objeto JSON de declarações que descreve quem é o token e por quanto tempo ele é válido. A assinatura é uma soma de verificação criptográfica das duas primeiras partes.

O cabeçalho e a carga útil são apenas codificados, não criptografados. Base64url é reversível por qualquer pessoa, e é exatamente por isso que um decodificador como este pode mostrar o conteúdo sem nenhuma senha.

Reivindicações padrão que você verá mais

A especificação JWT reserva alguns nomes curtos de declarações. iss é o emissor, sub o assunto (geralmente um ID de usuário) e aud o público-alvo. Três são carimbos de data/hora: isso (emitido em), experiência (expira) e nbf (não antes). Eles são armazenados em segundos desde 1970, e é por isso que um token bruto mostra um grande número como 1717000000 em vez de uma data — esta ferramenta os converte para você e informa se a janela ainda está aberta.

Todo o resto é uma declaração personalizada: funções, escopos, IDs de locatários, sinalizadores de recursos. Eles são perfeitamente válidos; eles simplesmente não são definidos pelo padrão, então a Tabela de Reivindicações os marca como personalizados.

Assinado não está criptografado

Um JWT normal (um JWS) é assinado. A assinatura significa que um servidor pode detectar se alguém alterou o cabeçalho ou a carga útil – mas não faz nada para ocultá-los. Trate a carga como pública: nunca coloque senhas, números de cartão ou segredos nela. Se o conteúdo em si precisar ser secreto, você precisará de um token criptografado (um JWE), que possui cinco segmentos e não pode ser lido sem a chave de descriptografia.

Por que a decodificação é segura, mas a verificação não é

A leitura de um token não precisa de nada além do token, portanto, fazê-lo no seu navegador é privado e inofensivo. A verificação é um trabalho diferente: prova que o token é autêntico e não expirado e requer o segredo HMAC do emissor (para HS256) ou a chave pública (para RS256/ES256). Um navegador não pode mantê-los com segurança e um servidor nunca deve confiar em um token que não tenha sido verificado. É por isso que esta ferramenta pára deliberadamente na decodificação – e é por isso que você nunca deve colar um token de produção ativo que você não controla, já que quem possui um token válido geralmente pode agir como você.