O que é JWT? Estrutura, claims e decodificação

O que é JWT

O que é JWT? Estrutura, claims e um decodificador privado | We.Inc

JSON Web Tokens explicados: header, payload e assinatura, as sete claims registradas da RFC 7519, armadilhas de segurança e um decodificador que nunca envia seu token para lugar nenhum.

Um JWT (JSON Web Token) é uma string compacta e segura para URLs, com três partes em base64url separadas por pontos: um header que indica o algoritmo, um payload de claims como sub e exp, e uma assinatura. Qualquer pessoa pode decodificar e ler o payload; só a assinatura, verificada com a chave certa, prova que ninguém o alterou.

Nomes de claims registradas (RFC 7519, seção 4.1)

Cole um token no decodificador abaixo para ver o header e o payload, com cada claim registrada explicada e cada timestamp convertido em uma data legível. A decodificação acontece no próprio JavaScript desta página, então o token nunca é enviado. Isso importa, porque um token válido é uma chave para a conta de alguém.

Perguntas frequentes

É seguro decodificar um JWT online?

Só se a decodificação acontecer no seu navegador. O token é uma credencial: quem tiver um válido pode chamar a API como aquele usuário até ele expirar. O decodificador desta página roda localmente e não envia nada, mas, para tokens de produção, o hábito mais seguro é decodificar apenas tokens de teste.

Um JWT é criptografado?

Um JWT assinado comum (um JWS) não é. O payload dele é apenas codificado em base64url, o que qualquer pessoa pode reverter. Tokens criptografados existem como JWE, com cinco partes separadas por pontos em vez de três, mas a maioria dos tokens de login e de API é assinada, não criptografada.

Em que formato ficam exp e iat?

NumericDate: segundos inteiros desde 1970-01-01T00:00:00Z, ignorando segundos bissextos. O Date.now() do JavaScript retorna milissegundos, então divida por 1000 antes de comparar, um bug muito comum.

Devo guardar um JWT no localStorage ou em um cookie?

Qualquer script rodando na página pode ler o localStorage, então um único bug de cross-site scripting pode roubar o token. Um cookie HttpOnly, Secure e SameSite o mantém longe dos scripts, ao custo de lidar com CSRF. Muitos times escolhem o cookie para sessões no navegador.

Consigo deslogar um usuário com um JWT?

Não só com ele, porque o token continua válido até o exp. Use expiração curta mais refresh tokens que você possa revogar, ou mantenha uma lista de bloqueio de valores jti para tokens que precisam morrer antes.

As três partes

Algoritmos de assinatura

Armadilhas que ainda causam vazamentos

Decodificar e verificar no código

Decodificar um payload em JavaScript puro

Lê as claims sem verificá-las. Serve para mostrar um nome de usuário na UI, nunca para decidir acesso.

Verificar no servidor com jose

O jwtVerify confere a assinatura, exp e nbf, e com estas opções também o emissor, o público e o algoritmo permitido.

Decodificador de JWT privado

Cole um token para ler o header e o payload. A decodificação roda no seu navegador; o token não é enviado, guardado nem registrado.

Quem emitiu o token

A quem o token se refere, geralmente um id de usuário

Quais destinatários devem aceitá-lo

Rejeitar a partir deste momento

Rejeitar antes deste momento

Quando o token foi criado

Um id único, útil para impedir reuso

JWT

Carregar token de exemplo

Limpar

Header

Payload

Assinatura (não verificada aqui)

Claims explicadas

Claim

Valor

Significado

Claim personalizada

Um JWT assinado tem 3 partes separadas por pontos; este tem {n}.

5 partes indicam um JWE criptografado, que não pode ser lido sem a chave.

A parte {n} não é JSON válido em base64url.

Expirou {v}

Válido até {v}

Não válido até {v}

alg é none: este token não tem assinatura e deve ser rejeitado.

Decodificado localmente. Nada sai desta página.

Comece grátis · Sem cartão de crédito

Relacionados: Guias

Produto

Para quem é

Recursos

Recursos

Empresa

Mapa do site