Decodificador JWT Gratuito

Decodifique e inspecione JSON Web Tokens · header, payload, claims e expiração.

Header


      

Payload


      

Assinatura


      

Sobre JWTs

JSON Web Tokens (JWTs) são uma forma compacta de representar claims entre duas partes. Eles consistem em três partes: um header (algoritmo e tipo), um payload (claims como emissor, expiração e subject) e uma assinatura. Esta ferramenta decodifica o header e o payload, mas não verifica a assinatura · para isso, é preciso ter o segredo de assinatura ou a chave pública. Toda a decodificação ocorre no seu navegador; seu token nunca é enviado a lugar nenhum.

Uma breve história dos JSON Web Tokens

O JSON Web Token (JWT) foi padronizado como RFC 7519 em maio de 2015 por Michael B. Jones (Microsoft), John Bradley (Ping Identity) e Nat Sakimura (NRI) sob o Grupo de Trabalho JOSE da IETF. Foi a culminação de meia década de trabalho: o primeiro internet-draft de JWT apareceu em dezembro de 2010, surgindo do formato pesado de asserção baseado em XML do SAML 2.0 (2005) e da necessidade sentida de algo mais leve que os navegadores pudessem analisar nativamente. O avanço foi escolher JSON em vez de XML e base64url em vez de PEM: um JWT podia caber em uma string de consulta de URL ou em um cabeçalho Authorization: Bearer. Toda a família JOSE foi entregue como um conjunto coordenado: RFC 7515 (JWS) para assinatura, RFC 7516 (JWE) para criptografia, RFC 7517 (JWK) para o formato de chave, RFC 7518 (JWA) para identificadores de algoritmo e RFC 7519 (JWT) para a camada de afirmações, todos no mesmo dia de maio de 2015. A adoção foi instantânea. OAuth 2.0 (RFC 6749, 2012) tinha padronizado tokens de acesso mas deixou seu formato opaco; a indústria escolheu JWT. OpenID Connect (dezembro de 2014, OpenID Foundation) tornou JWT obrigatório para tokens ID. Em 2017, todo grande provedor de identidade (Auth0, Okta, Azure AD, AWS Cognito, Google Identity, Firebase Auth) emitia JWTs como seu formato nativo de sessão. JWT.io, o site decodificador que a Auth0 lançou em 2014, tornou-se a ferramenta de depuração JWT de fato e ajudou a cimentar o domínio mental do formato entre desenvolvedores. Dois incidentes de segurança moldaram o modelo de ameaça moderno: a divulgação de Tim McLean em 2015 do bypass alg: none e do ataque de confusão de algoritmo HS/RS, e CVE-2022-21449 (abril de 2022), o bug «Psychic Signatures» de Neil Madden no verificador ECDSA de Java 15-18. Ambos levaram ao endurecimento padrão das bibliotecas: a maioria das bibliotecas modernas agora recusa alg: none de imediato e fixa o algoritmo esperado em vez de lê-lo do cabeçalho do token.

A anatomia de um JWT

Onde os JWTs são usados na prática

Padrões e marcos de segurança

Perguntas frequentes adicionais

Por que esta ferramenta não verifica a assinatura?

A verificação precisa de um segredo (HMAC) ou chave pública (RSA / ECDSA / EdDSA). Colar um segredo HMAC de produção em qualquer site é em si uma fuga de credenciais, mesmo em uma ferramenta que jura não transmitir nada. A verificação pertence a um servidor que você controla. O trabalho do decodificador é tornar o conteúdo legível para que você possa ver o que seu verificador deveria estar verificando.

É seguro colar tokens reais de produção aqui?

A decodificação acontece inteiramente no seu navegador. O token não é enviado pela rede, escrito em nenhum log, nem armazenado em lugar nenhum. Dito isso, um JWT muitas vezes é uma credencial: quem detém um token de acesso não expirado pode agir como o usuário. A convenção da comunidade é «trate um JWT de produção como um cookie de sessão»: prefira tokens de teste quando puder, e rotacione qualquer token real que tenha compartilhado fora da sessão de navegador que o emitiu.

Onde devo armazenar um JWT no navegador?

Os dois padrões comuns têm cada um um trade-off. localStorage é conveniente mas legível por qualquer ataque XSS bem-sucedido na página. Cookies com HttpOnly são invisíveis ao JavaScript então XSS não pode lê-los, mas precisam de SameSite=Strict ou SameSite=Lax para evitar CSRF. A melhor prática atual: tokens de acesso de curta duração em uma variável JavaScript (somente memória) mais um token de refresh de longa duração em um cookie HttpOnly + Secure + SameSite=Strict com escopo para o endpoint de refresh, rotacionado em cada uso.

O que faz o campo kid no cabeçalho?

Identifica qual chave assinou o token. Provedores de identidade modernos publicam suas chaves públicas em um endpoint /.well-known/jwks.json como um JWK Set (RFC 7517); o verificador procura a chave cujo kid corresponde ao cabeçalho do token. É isso que torna possível a rotação de chaves sem tempo de inatividade: tanto chaves antigas quanto novas podem coexistir no JWKS durante o período de carência.

Posso revogar um JWT depois de emitido?

Não nativamente. Um JWT assinado é válido até sua afirmação exp; essa apatridia é a propriedade-destaque do formato. Soluções alternativas: manter tokens de acesso curtos (5-15 minutos) emparelhados com um token de refresh revogável; manter uma lista de negação do lado do servidor de valores jti revogados; rotacionar a chave de assinatura (o que invalida cada token pendente assinado com ela). Cada opção reintroduz algum estado; esse é o trade.

Decodificar um token é o mesmo que descriptografá-lo?

Não. Decodificar reverte base64url para JSON: qualquer um pode fazer, e esse é o ponto. Descriptografar requer uma chave e só se aplica a JSON Web Encryption (JWE, RFC 7516), que é a variante criptografada da família JOSE. A maioria dos tokens que você vê na natureza são JWS (assinados mas não criptografados), então decodificar é suficiente para lê-los.

Ferramentas relacionadas