Descodificador JWT
Descodifica e inspeciona JSON Web Tokens localmente: cabeçalho, carga útil e claims de expiração.
A carregar Descodificador JWT… Se nada acontecer, ativa o JavaScript.
Um JSON Web Token (JWT) é uma cadeia compacta e segura para URL que codifica um conjunto assinado de claims (afirmações sobre um utilizador, uma sessão ou uma permissão) num formato que qualquer parte que tenha a chave certa pode verificar de forma independente. Definido pelo RFC 7519 (2015) e parte da família de normas JOSE (assinatura e cifragem de objetos JSON), os JWT tornaram-se rapidamente o mecanismo dominante para a autenticação sem estado e a autorização de API em arquiteturas web, móveis e de microsserviços. Um JWT é composto por três segmentos codificados em Base64url e separados por pontos: o cabeçalho (metadados do algoritmo), a carga útil (os claims) e a assinatura.
Exemplos
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIn0.<sig>
Header {"alg":"HS256","typ":"JWT"} · Payload {"sub":"1234567890","name":"John Doe"}
Um JWT são três partes em Base64url unidas por pontos: cabeçalho.carga_útil.assinatura.
Perguntas frequentes
O meu token é enviado para um servidor?
Quais são as três partes de um JWT?
Quando devo usar um JWT na minha própria aplicação?
Em que difere um JWT de um cookie de sessão?
Esta ferramenta verifica a assinatura do JWT?
O que significam os claims padrão de marca temporal?
Pode usar-se um JWT sem assinatura (alg: none)?
As cargas úteis dos JWT são privadas e confidenciais?
Qual é a diferença entre HS256 e RS256?
Qual é um erro comum que os programadores cometem com os JWT?
Sobre Descodificador JWT
Os JWT aparecem em praticamente todos os fluxos de autenticação modernos. Os tokens de acesso OAuth 2.0 são quase universalmente emitidos como JWT. Os tokens de identidade do OpenID Connect são JWT que transportam os claims de identidade do utilizador autenticado. Os sistemas de início de sessão único passam JWT entre fornecedores de identidade e fornecedores de serviços. As funções serverless e os workers de borda validam JWT localmente sem consultar uma base de dados, permitindo uma autenticação sem estado e escalável horizontalmente. As apps móveis guardam os JWT como tokens de portador (bearer) e incluem-nos no cabeçalho Authorization de cada pedido de API. Perceber o que está dentro de um token (que permissões concede, quando expira e quem o emitiu) é uma tarefa diária para qualquer engenheiro de backend ou de segurança.
Esta ferramenta descodifica o cabeçalho e a carga útil de qualquer JWT inteiramente dentro do teu navegador. Descodifica em Base64url cada segmento, analisa o JSON e apresenta os claims num formato legível. As marcas temporais numéricas (iat, exp, nbf) são convertidas automaticamente em datas legíveis para que vejas de imediato se um token expirou. A assinatura é mostrada tal como está, mas deliberadamente não é verificada: a verificação requer o segredo do emissor (para HMAC) ou a sua chave pública (para RSA/ECDSA), e nunca deves colar nenhum dos dois numa ferramenta online não fidedigna. Como a descodificação acontece localmente, nem sequer o próprio token sai do teu dispositivo.
Alguns pontos de segurança a ter em conta: os JWT são assinados mas não cifrados por omissão; a carga útil está apenas codificada em Base64url, o que significa que qualquer pessoa que intercete o token pode ler os seus claims. Nunca incluas dados pessoais sensíveis (palavras-passe, números de cartão) na carga útil de um JWT. O ataque alg: none é uma vulnerabilidade conhecida em bibliotecas JWT ingénuas que aceitam tokens não assinados; usa sempre uma biblioteca bem auditada que valide explicitamente o algoritmo. Verifica também o claim exp antes de confiar num token: uma assinatura válida não significa que o token continue ativo.
A ascensão do JSON Web Token
Os JSON Web Token foram introduzidos pela Internet Engineering Task Force (IETF) como parte do grupo de trabalho JOSE (assinatura e cifragem de objetos JSON), com o RFC 7519 publicado em maio de 2015. O objetivo era criar um formato de credencial compacto e autónomo que pudesse substituir as verbosas e complexas asserções SAML em XML usadas nos sistemas empresariais de início de sessão único. O desenho delimitado por pontos e codificado em Base64url foi escolhido deliberadamente para ser seguro em URL e caber confortavelmente dentro de um cabeçalho HTTP.
A adoção foi explosiva. Poucos anos depois da publicação, quase todos os principais frameworks de autenticação, do Auth0 ao Firebase Authentication e ao AWS Cognito, tinham normalizado os JWT como o seu formato de token. O site jwt.io, lançado pela Auth0 como ferramenta de depuração, tornou-se um dos utilitários para programadores mais visitados da internet. Esta popularidade também atraiu escrutínio: os investigadores de segurança catalogaram uma série de vulnerabilidades de implementação (o bug 'alg: none', os ataques de confusão de algoritmos) que afetavam implementações de bibliotecas ingénuas, o que impulsionou uma onda de melhorias nas bibliotecas JWT de todas as linguagens de programação.
Uma decisão de desenho interessante nos JWT é que a carga útil é legível por qualquer pessoa: a assinatura garante a integridade, mas não o sigilo. Isto foi intencional: os criadores queriam que os tokens fossem depuráveis sem uma chave, permitindo que ferramentas como os descodificadores de JWT ajudem os programadores a inspecionar tokens durante o desenvolvimento. A contrapartida é que os programadores têm de ser disciplinados quanto aos claims que incluem, uma lição aprendida da pior forma por equipas que enviaram por acidente JWT com dados sensíveis de utilizadores.