Decodificador de JSON Web Token (JWT): Inspecione Conteúdo e Claims de JWT

· 12 min de leitura

Índice

Entendendo JSON Web Tokens

JSON Web Tokens (JWTs) são tokens compactos e autocontidos usados para transmitir informações com segurança entre partes como um objeto JSON. Eles se tornaram o padrão de fato para autenticação e troca de informações em aplicações web modernas, aplicativos móveis e arquiteturas de microsserviços.

Ao contrário da autenticação tradicional baseada em sessão, onde os dados do usuário são armazenados no servidor, os JWTs incorporam os dados diretamente dentro do próprio token. Essa diferença fundamental torna os JWTs ideais para operações sem estado—o servidor não precisa manter armazenamento de sessão ou consultar um banco de dados para verificar a identidade do usuário em cada solicitação.

Pense em um JWT como um passaporte digital. Assim como um passaporte contém suas informações de identidade e é protegido criptograficamente com hologramas e marcas d'água, um JWT contém declarações sobre um usuário e é assinado criptograficamente para evitar adulteração. Quando você apresenta seu passaporte no controle de fronteira, os oficiais podem verificar sua autenticidade sem ligar para seu país de origem—da mesma forma, os serviços podem verificar JWTs sem contatar o servidor emissor.

Dica profissional: JWTs são particularmente úteis em sistemas distribuídos e arquiteturas de microsserviços onde manter estado de sessão centralizado criaria gargalos. Cada serviço pode verificar tokens independentemente sem comunicação entre serviços.

Cenários comuns onde os JWTs se destacam incluem:

A Estrutura de Três Partes dos JWTs

Todo JWT consiste em três partes distintas separadas por pontos. Cada parte serve um propósito específico na funcionalidade e modelo de segurança do token. Quando você vê um JWT, ele se parece com isto:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

Vamos detalhar cada componente:

Cabeçalho

O cabeçalho normalmente consiste em duas partes: o tipo de token (que é JWT) e o algoritmo de assinatura sendo usado, como HMAC SHA256 ou RSA. Esta informação diz à parte receptora como processar e verificar o token.

Um cabeçalho decodificado se parece com isto:

{
  "alg": "HS256",
  "typ": "JWT"
}

Payload

O payload contém as claims—declarações sobre uma entidade (tipicamente o usuário) e metadados adicionais. As claims são categorizadas em três tipos:

Tipo de Claim Descrição Exemplos
Claims Registradas Claims predefinidas recomendadas pela especificação JWT iss, exp, sub, aud
Claims Públicas Claims personalizadas definidas por aqueles que usam JWTs, devem ser resistentes a colisões name, email, role
Claims Privadas Claims personalizadas acordadas entre as partes department, permissions

Um payload típico pode se parecer com:

{
  "sub": "1234567890",
  "name": "John Doe",
  "email": "[email protected]",
  "role": "admin",
  "iat": 1516239022,
  "exp": 1516242622
}

Assinatura

A assinatura é o selo criptográfico que garante que o token não foi adulterado. Ela é criada pegando o cabeçalho codificado, o payload codificado, uma chave secreta e aplicando o algoritmo especificado no cabeçalho.

Por exemplo, se usar HMAC SHA256, a assinatura é criada assim:

HMACSHA256(
  base64UrlEncode(header) + "." + base64UrlEncode(payload),
  secret
)

A assinatura permite ao destinatário verificar que o remetente do JWT é quem diz ser e que a mensagem não foi alterada no caminho.

Por Que Usar um Decodificador de JSON Web Token?

Embora os JWTs sejam projetados para serem legíveis por máquina, os desenvolvedores frequentemente precisam inspecionar seus conteúdos durante desenvolvimento, depuração e auditoria de segurança. Um decodificador JWT transforma as strings codificadas em Base64 em JSON legível por humanos, facilitando o entendimento de quais informações o token contém.

Aqui estão as principais razões pelas quais os desenvolvedores usam decodificadores JWT:

Desenvolvimento e Depuração

Ao construir sistemas de autenticação, você precisa verificar se seus tokens contêm as claims corretas e estão formatados adequadamente. Um decodificador permite que você inspecione tokens rapidamente sem escrever código personalizado ou usar ferramentas de linha de comando.

Por exemplo, se os usuários relatarem problemas de autenticação, você pode decodificar seu JWT para verificar se a claim exp (expiração) passou ou se claims obrigatórias estão faltando.

Auditoria de Segurança

Equipes de segurança usam decodificadores JWT para analisar tokens em busca de vulnerabilidades potenciais. Eles podem verificar:

Testes de Integração

Ao integrar com APIs de terceiros que usam autenticação JWT, decodificar tokens ajuda você a entender o formato esperado e a estrutura das claims. Isso é especialmente útil quando a documentação está incompleta ou desatualizada.

Aprendizado e Educação

Para desenvolvedores novos em JWT, um decodificador fornece feedback visual imediato sobre como a estrutura de três partes funciona e como mudanças no payload afetam o token final.

Dica rápida: Nunca cole JWTs de produção contendo dados reais de usuários em decodificadores online. Use nossa ferramenta Decodificador JWT que processa tokens inteiramente no seu navegador sem enviar dados para nenhum servidor.

Processo de Decodificação Passo a Passo

Decodificar um JWT é simples uma vez que você entende o processo. Veja como funciona por baixo dos panos:

Passo 1: Dividir o Token

Primeiro, divida a string JWT nos caracteres de ponto para separar as três partes:

const parts = token.split('.');
const header = parts[0];
const payload = parts[1];
const signature = parts[2];

Passo 2: Decodificar Base64

Cada parte é codificada em Base64URL (uma variante segura para URL do Base64). Decodifique o cabeçalho e o payload para obter as strings JSON:

const decodedHeader = atob(header);
const decodedPayload = atob(payload);

Passo 3: Analisar JSON

Analise as strings decodificadas como objetos JSON:

const headerObj = JSON.parse(decodedHeader);
const payloadObj = JSON.parse(decodedPayload);

Passo 4: Inspecionar o Conteúdo

Agora você pode examinar as claims e metadados. Verifique claims padrão como:

Usando nosso Decodificador JWT, todo esse processo acontece instantaneamente no seu navegador. Simplesmente cole seu token e veja o cabeçalho e payload decodificados imediatamente.

Validando a Assinatura do Token

Decodificar um JWT é apenas metade da história—a validação é onde a segurança acontece. Qualquer um pode decodificar um JWT já que é apenas JSON codificado em Base64, mas apenas partes com o segredo correto ou chave pública podem verificar a assinatura.

Por Que a Validação de Assinatura Importa

A assinatura garante duas propriedades de segurança críticas:

  1. Integridade: O token não foi modificado desde que foi assinado
  2. Autenticidade: O token foi criado por uma parte confiável que possui a chave secreta

Sem validação de assinatura, um atacante poderia decodificar um JWT, alterar o payload (talvez elevando seus privilégios de "usuário" para "admin"), recodificá-lo e usar o token modificado. A assinatura previne este ataque.

Processo de Validação

Para validar uma assinatura JWT, você precisa:

O processo de validação recria a assinatura usando o cabeçalho e payload do token, então a compara com a assinatura incluída no token. Se elas corresponderem, o token é válido.

Dica profissional: Sempre valide JWTs no lado do servidor, nunca confie apenas na validação do lado do cliente. Atacantes podem contornar verificações do lado do cliente, mas não podem forjar uma assinatura válida sem a chave secreta.

Algoritmos de Assinatura Comuns

Algoritmo Tipo Tipo de Chave Caso de Uso
HS256 HMAC com SHA-256 Simétrica (segredo compartilhado) Aplicações simples, mesma parte cria e verifica
RS256 RSA com SHA-256 Assimétrica (par de chaves pública/privada) Sistemas distribuídos, múltiplos verificadores
ES256

📚 You May Also Like