O que é um JSON Web Token (JWT)?
Um JSON Web Token (JWT) é um padrão aberto (RFC 7519) que define uma forma compacta e autossuficiente de transmitir informações com segurança entre partes como um objeto JSON. Essas informações podem ser verificadas e confiáveis porque são assinadas digitalmente. JWTs podem ser assinados usando um segredo (com o algoritmo HMAC) ou um par de chaves pública/privada usando RSA ou ECDSA.
Estrutura de um JWT
JWTs consistem em três partes separadas por pontos (.). Quando você vê um token, ele se parece com isto: xxxxx.yyyyy.zzzzz.
- Cabeçalho: Geralmente consiste em duas partes: o tipo do token, que é JWT, e o algoritmo de assinatura sendo usado, como HMAC SHA256 ou RSA. É codificado em Base64Url.
- Payload: Contém as declarações (claims). As declarações são afirmações sobre uma entidade (geralmente, o usuário) e dados adicionais (como função, ID do usuário, e-mail e tempo de expiração `exp`). Também é codificado em Base64Url.
- Assinatura: Para criar a parte da assinatura, você deve pegar o cabeçalho codificado, o payload codificado, um segredo, o algoritmo especificado no cabeçalho e assinar isso. Isso garante que o token não foi alterado durante a transmissão.
O Perigo dos Decodificadores JWT Online
JWTs são incrivelmente sensíveis. Se um ator malicioso interceptar um JWT válido pertencente a um usuário administrador, ele pode facilmente sequestrar a sessão desse usuário e acessar sistemas privados. Você nunca deve colar JWTs de produção em ferramentas online aleatórias. Muitos decodificadores online enviam silenciosamente seu token colado para um servidor backend para registro, análise ou pior.
Nossa ferramenta é diferente. Escrevemos este decodificador usando JavaScript puro no frontend. O processo de decodificação (simplesmente analisar as strings Base64) ocorre inteiramente na memória do seu navegador. Tente desconectar da internet e colar seu token—ele ainda decodificará perfeitamente, provando que seus dados nunca saem da sua máquina.
JWTs são Criptografados?
Um equívoco comum entre desenvolvedores juniores é que JWTs são criptografados e escondem os dados dentro do payload. Eles não são. JWTs padrão (JWS) são meramente codificados (Base64Url) e assinados criptograficamente. Qualquer um que interceptar o token pode decodificá-lo (usando uma ferramenta como esta) e ler as declarações. Portanto, você nunca deve colocar senhas, números de cartão de crédito ou segredos de API dentro do payload.