Sobre esta ferramenta
O que é um JWT
Um JSON Web Token assinado (RFC 7519) é composto por três strings Base64URL unidas por pontos: um cabeçalho, um payload e uma assinatura. O cabeçalho indica como o token é assinado (alg). O payload é um objeto JSON de claims, afirmações como a quem se refere o token (sub), quem o emitiu (iss) e quando expira (exp). A assinatura é calculada sobre as duas primeiras partes.
Descodificar não é verificar. O cabeçalho e o payload estão apenas codificados, não encriptados: qualquer pessoa que tenha um token pode lê-lo, como esta página faz sem qualquer chave, e qualquer pessoa pode escrever um token com as claims que quiser. Nunca coloque um segredo no payload de um JWT e nunca confie numa claim antes de a assinatura ter sido verificada.
Verificar a assinatura
HS256, HS384 e HS512 são HMAC: o mesmo segredo assina e verifica, por isso quem consegue verificar também consegue falsificar. RS256, PS256 e ES256 e as respetivas variantes 384 e 512 são assimétricos: o emissor assina com uma chave privada e a verificação faz-se com a chave pública, que muitas vezes é publicada como JWK Set no jwks_uri do emissor.
Cole o segredo, ou a chave pública em PEM, como certificado X.509 ou como JWK. A verificação é feita pela Web Crypto API do seu navegador. O resultado é um de três: a assinatura é válida, é inválida, ou não pôde ser verificada. Neste último caso, a página indica o motivo: não há chave, a chave tem o tipo ou a curva errados, o algoritmo não é suportado, ou o cabeçalho diz "alg": "none", o que significa que o token nem sequer está assinado.
Uma assinatura válida é necessária, mas não suficiente. Um serviço real também tem de verificar a expiração, o emissor e a audiência, e tem de decidir por si próprio que algoritmo aceita, em vez de confiar no cabeçalho do token.
Datas, o token de exemplo e a assinatura
exp, nbf e iat são timestamps Unix em segundos. A tabela de claims mostra-os como datas no seu fuso horário, e o indicador por cima dela diz se o token expirou, se ainda não é válido ou durante quanto tempo continua válido, segundo o relógio do seu dispositivo.
A página abre com um token de exemplo criado no seu navegador, emitido agora e válido durante uma hora. Está assinado com HS256 e com o segredo de exemplo devtools-sample-secret-not-for-production, e é por isso que a assinatura é válida. Esse segredo é público: não o use para nada real.
Assinar cria um token a partir do cabeçalho e do payload que editar e de um segredo HMAC. Use-o para testes e desenvolvimento local. Os tokens, segredos e chaves que introduzir ficam neste separador: nada é enviado, guardado ou registado.