Decodificador de JSON Web Token (JWT): Inspecione Conteúdo e Claims de JWT
· 12 min de leitura
Índice
- Entendendo JSON Web Tokens
- A Estrutura de Três Partes dos JWTs
- Por Que Usar um Decodificador de JSON Web Token?
- Processo de Decodificação Passo a Passo
- Validando a Assinatura do Token
- Considerações de Segurança e Melhores Práticas
- Problemas Comuns de JWT e Soluções
- JWT vs. Autenticação de Sessão Tradicional
- Casos de Uso e Exemplos do Mundo Real
- Dicas de Depuração e Solução de Problemas
- Perguntas Frequentes
- Artigos Relacionados
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:
- Single Sign-On (SSO): Usuários se autenticam uma vez e acessam múltiplos serviços com o mesmo token
- Autenticação de API: Aplicativos móveis e SPAs se autenticam com APIs backend sem cookies
- Troca de Informações: Transmitem dados verificados com segurança entre serviços
- Autorização Sem Estado: Concedem acesso temporário a recursos sem sessões do lado do servidor
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:
- Informações sensíveis inadvertidamente incluídas no payload
- Algoritmos de assinatura fracos (como
noneouHS256quandoRS256é esperado) - Claims de segurança ausentes ou configuradas incorretamente
- Tempos de vida excessivos de tokens que aumentam o risco de segurança
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:
iss(issuer): Quem criou e assinou o tokensub(subject): O usuário ou entidade que o token representaaud(audience): Para quem o token é destinadoexp(expiration): Quando o token expira (timestamp Unix)iat(issued at): Quando o token foi criadonbf(not before): O token não deve ser aceito antes deste horário
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:
- Integridade: O token não foi modificado desde que foi assinado
- 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 JWT completo (todas as três partes)
- A chave secreta (para algoritmos HMAC) ou chave pública (para algoritmos RSA/ECDSA)
- Conhecimento do algoritmo de assinatura usado
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 |