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.
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 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.
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.
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.
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.
Lê as claims sem verificá-las. Serve para mostrar um nome de usuário na UI, nunca para decidir acesso.
O jwtVerify confere a assinatura, exp e nbf, e com estas opções também o emissor, o público e o algoritmo permitido.
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