Estrutura e funcionamento de um JSON Web Token (JWT)
Um JSON Web Token (JWT) é um padrão aberto (RFC 7519) utilizado para compartilhar declarações de segurança entre duas partes. O token é composto por três partes distintas, separadas por pontos (.): o cabeçalho (header), a carga útil (payload) e a assinatura (signature).
A estrutura visual de um JWT segue o formato:
header.payload.signature
Cada uma dessas partes desempenha um papel específico na transmissão de dados:
- Cabeçalho (Header): Contém metadados sobre o token, tipicamente especificando o tipo de token e o algoritmo de assinatura utilizado.
- Carga útil (Payload): Contém as declarações (claims), que são informações sobre uma entidade (geralmente o usuário) e dados adicionais.
- Assinatura (Signature): Utilizada para verificar se a mensagem não foi alterada ao longo do caminho.
O Decodificador JWT lê essa estrutura de três partes separadas por pontos para extrair e apresentar as informações legíveis contidas no cabeçalho e na carga útil.
O cabeçalho do JWT e suas propriedades
O cabeçalho é a primeira parte do token e fornece as instruções de processamento para quem recebe o JWT. Ele é codificado em formato Base64URL antes da transmissão. Quando decodificado, o cabeçalho revela um objeto JSON com propriedades específicas.
As propriedades mais comuns encontradas no cabeçalho são:
alg(Algoritmo): Define o algoritmo de criptografia ou hash utilizado para criar a assinatura, como HS256 (HMAC com SHA-256) ou RS256 (RSA com SHA-256).typ(Tipo): Declara o tipo de mídia do token completo. No caso de um JSON Web Token, o valor padrão é frequentementeJWT.
O Decodificador JWT extrai essas informações e exibe o resultado formatado como JSON no campo Cabeçalho (Header), além de destacar o Algoritmo e o Tipo em campos dedicados.
A carga útil (payload) e o controle de tempo
A carga útil contém as declarações (claims) que transmitem os dados reais da aplicação. Assim como o cabeçalho, a carga útil é codificada em Base64URL e estruturada em formato JSON. As declarações são divididas em três categorias: registradas, públicas e privadas.
As declarações registradas mais importantes para o controle de tempo e validade do token são:
iat(Issued At): Indica o momento exato em que o token foi emitido, representado no formato de timestamp Unix.exp(Expiration Time): Define o limite de tempo após o qual o token não deve mais ser aceito para processamento, também em timestamp Unix.
O decodificador processa essas propriedades para exibir os valores legíveis em Emitido em e Expira em, além de calcular o estado atual do token.
Regras de validação e tratamento de erros
Para que a decodificação ocorra com sucesso, o token inserido deve cumprir requisitos estruturais rígidos. O Decodificador JWT aplica validações automáticas e exibe mensagens de erro específicas caso o input apresente falhas:
| Cenário de Entrada | Comportamento ou Mensagem de Erro Exibida |
|---|---|
| Entrada vazia | Permanece no estado "Pronto. Cole um JWT para decodificá-lo." |
| Formato sem três partes separadas por pontos | "JWT inválido — são esperadas três partes separadas por pontos." |
| Cabeçalho com codificação Base64URL corrompida | "Não foi possível decodificar o cabeçalho — Base64URL inválido." |
| Carga útil com codificação Base64URL corrompida | "Não foi possível decodificar a carga útil — Base64URL inválido." |
| Cabeçalho decodificado que não é um JSON válido | "O cabeçalho não é um JSON válido." |
| Carga útil decodificada que não é um JSON válido | "A carga útil (payload) não é um JSON válido." |
| Comprimento do token excessivamente longo | "O comprimento excede o limite de um JWT real." |
Quando ocorre qualquer um dos erros listados acima, as áreas destinadas à exibição dos dados decodificados são ocultadas automaticamente para evitar a exibição de dados inconsistentes. Ao acionar a função Limpar, o foco do cursor retorna imediatamente para o campo de entrada Cole seu JWT.
Avaliação de status e a claim de expiração
O decodificador analisa a presença e o valor da claim exp (tempo de expiração) na carga útil para determinar a validade temporal do token. Essa análise resulta em um dos seguintes indicadores de status:
- Válido: O horário atual do sistema é anterior ao valor definido na claim
exp. - Expirado: O horário atual do sistema ultrapassou o valor definido na claim
exp. - Ainda não é válido: O horário atual é anterior ao momento de emissão ou início de validade do token.
- Sem expiração: O token não possui a claim
expem sua carga útil.
É importante destacar que a ferramenta exibe o aviso "Isso verifica apenas a claim exp — não verifica a assinatura, o emissor ou o público-alvo.".
Decodificação versus verificação de assinatura
Existe uma diferença fundamental entre decodificar um JWT e verificar a sua assinatura.
A decodificação é apenas a reversão da codificação Base64URL. Como o Base64URL não é um método de criptografia, qualquer pessoa que tenha acesso ao token pode decodificar seu conteúdo e ler as informações estruturadas em JSON. Esta ferramenta realiza exclusivamente a decodificação.
A verificação, por outro lado, exige a validação da assinatura do token. Para verificar se o conteúdo do JWT não foi alterado por terceiros, é necessário aplicar o algoritmo criptográfico especificado no cabeçalho utilizando o segredo de assinatura (para algoritmos simétricos como HMAC) ou a chave pública correspondente (para algoritmos assimétricos como RSA).
Como esta ferramenta não realiza a verificação de assinatura, ela não solicita, não armazena e não processa chaves públicas ou segredos de assinatura.
Privacidade e processamento local
O processamento dos dados inseridos no Decodificador JWT ocorre inteiramente no navegador do usuário. A decodificação das strings em Base64URL e a conversão em objetos JSON são executadas localmente pelo motor de JavaScript do próprio navegador. Nenhum dado, token ou informação pessoal é enviado para os servidores do BroBroGo.
Perguntas Frequentes (FAQ)
É seguro colar meu JWT aqui?
Sim. A decodificação ocorre inteiramente no seu navegador — seu token nunca é enviado para o BroBroGo.
Esta ferramenta verifica a assinatura?
Não. Ele apenas decodifica o cabeçalho (header) e a carga útil (payload) para leitura. A verificação de assinatura exige o segredo de assinatura ou chave pública, informações que esta ferramenta nunca solicita.
Como sei se meu token expirou?
O decodificador lê a propriedade exp e exibe um indicador de status — válido, expirado, ainda não válido ou sem expiração — ao lado do token decodificado.