Decodifique um JWT no navegador para ler o cabeçalho e o payload, ver as datas de exp, iat e nbf e saber se expirou. A assinatura não é verificada.
O que é o JWT Decoder?
O JWT Decoder é uma ferramenta online gratuita que decodifica um JSON Web Token no seu navegador e mostra o cabeçalho e o payload como JSON formatado, com os horários de exp, iat e nbf como datas e um aviso quando o token expirou ou ainda não é válido. Ele não verifica a assinatura.
O token é decodificado no seu dispositivo e não é enviado a lugar nenhum. Mesmo assim, prefira um token de um ambiente de teste: os Termos de Uso pedem que você não cole segredos, como tokens de acesso.
O que ela aceita
- Um JWT assinado na forma compacta: três partes Base64URL separadas por pontos, como a RFC 7519 descreve. Espaços e quebras de linha em volta do token são ignorados, e também uma palavra Bearer na frente dele, em qualquer combinação de maiúsculas e minúsculas, como em um cabeçalho Authorization.
- O cabeçalho e o payload são decodificados de Base64URL e UTF-8 e escritos como um único objeto JSON, {"header": …, "payload": …}, com a indentação que você escolher. Todo valor, inclusive números grandes, é copiado como está escrito no token.
- A assinatura só tem o alfabeto verificado (letras, dígitos, - e _), não é mostrada e pode estar vazia.
- As claims exp, iat e nbf são mostradas como datas ISO 8601 em UTC, como 2023-11-14T23:13:20Z, quando são números de segundos desde 1º de janeiro de 1970.
- Avisos: o token expirou quando exp é agora ou anterior, e ainda não é válido quando nbf está no futuro. Ambos comparam com o relógio do seu dispositivo. Uma claim que não é um horário válido também gera um aviso, e o mesmo vale para uma que parece estar em milissegundos, um número acima de 100.000.000.000: ela não é convertida em data, porque uma data no ano 5138 ou depois é quase certamente um engano.
- As outras claims, como sub, iss, aud ou roles, são mostradas como estão. A ferramenta não as interpreta.
Bom saber
- A assinatura não é verificada. Decodificar mostra o que o token diz, não que ele é autêntico: qualquer pessoa pode escrever um token com as claims que quiser. Só o programa que tem a chave pode verificá-lo.
- Um token não é criptografado. O cabeçalho e o payload são apenas codificados, então qualquer pessoa que tenha o token consegue lê-los. Não coloque segredos em um payload.
- Prefira um token de um ambiente de teste. O token fica no seu navegador, mas um token de acesso real é um segredo, e os Termos de Uso pedem que você não cole segredos.
- Só a forma compacta, de três partes, é lida. Um token criptografado (JWE, com cinco partes) é recusado, e o mesmo vale para um payload que não é um objeto JSON.
- As datas e os avisos dependem do relógio do seu dispositivo. Se esse relógio estiver errado, eles também estarão.
- Um token cortado, ou uma parte que não é Base64URL nem JSON válido, é recusado com uma mensagem que diz qual é a parte (cabeçalho, payload ou assinatura) e informa a posição dela. Nada é corrigido.
Como usar o JWT Decoder?
- Cole o seu JWT na caixa de entrada. Ele tem três partes separadas por pontos, como em cabeçalho.payload.assinatura. Um Bearer na frente, como em um cabeçalho Authorization copiado, é ignorado. Nada é executado enquanto você digita.
- Escolha a indentação (“2 espaços” ou “4 espaços”) e aperte “Decodificar”.
- Leia o cabeçalho e o payload ao lado da entrada. As claims exp, iat e nbf também são listadas como datas em UTC, e um aviso aparece se o token tiver expirado ou ainda não for válido. Se o token não puder ser decodificado, a mensagem diz qual parte está errada e informa a posição dela.
- Aperte “Copiar” para colocar o JSON na área de transferência, ou “Baixar” para salvá-lo como converted.json.
Exemplos
Um token que expirou
Cole este token e aperte “Decodificar”. O resultado é o cabeçalho e o payload como JSON, e a assinatura não é mostrada. As claims exp e iat, que são números de segundos desde 1º de janeiro de 1970, também são listadas como datas em UTC. Como exp está no passado, um aviso diz que o token expirou. O token é apenas decodificado, então o aviso não diz se ele é autêntico.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkFkYSIsImlhdCI6MTcwMDAwMDAwMCwiZXhwIjoxNzAwMDAzNjAwfQ.c2lnbmF0dXJl{
"header": {
"alg": "HS256",
"typ": "JWT"
},
"payload": {
"sub": "1234567890",
"name": "Ada",
"iat": 1700000000,
"exp": 1700003600
}
}Expira em 2023-11-14T23:13:20Z
Emitido em 2023-11-14T22:13:20Z
Este token expirou: a claim exp está no passado. O token é apenas decodificado aqui e a assinatura não é verificada, então isso não diz se ele é autêntico.
Um token com uma parte faltando
Um JWT tem exatamente três partes. Este texto tem duas, então a ferramenta recusa. Um token com assinatura vazia, como um token sem assinatura, ainda precisa dos dois pontos. Um token criptografado (JWE, com cinco partes) não pode ser decodificado.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkFkYSIsImlhdCI6MTcwMDAwMDAwMCwiZXhwIjoxNzAwMDAzNjAwfQUm JWT tem exatamente três partes separadas por pontos: cabeçalho.payload.assinatura. Este texto não tem. Tokens criptografados (JWE, que têm cinco partes) não podem ser decodificados aqui.
Linha 1, coluna 1
Um cabeçalho Authorization colado
A palavra Bearer e o espaço não fazem parte do token, então a ferramenta os ignora e decodifica o token normalmente. Aperte “Decodificar” com a linha inteira do cabeçalho.
Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI3IiwiaWF0IjoxNjAwMDAwMDAwfQ.c2lnbmF0dXJl{
"header": {
"alg": "HS256",
"typ": "JWT"
},
"payload": {
"sub": "7",
"iat": 1600000000
}
}Emitido em 2020-09-13T12:26:40Z
Um token que ainda não é válido
A claim nbf (not before) está bem no futuro, então um aviso diz que o token ainda não é válido, e nbf e exp são listadas como datas. A ferramenta as compara com o relógio do seu dispositivo no momento em que você aperta “Decodificar”.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI0MiIsIm5iZiI6OTk5OTk5OTk5OSwiZXhwIjoxMDAwMDAwMzU5OX0.c2lnbmF0dXJl{
"header": {
"alg": "HS256",
"typ": "JWT"
},
"payload": {
"sub": "42",
"nbf": 9999999999,
"exp": 10000003599
}
}Expira em 2286-11-20T18:46:39Z
Válido a partir de 2286-11-20T17:46:39Z
Este token ainda não é válido: a claim nbf está no futuro.
Limites e privacidade
Limites de tamanho
- Entrada: até 2.000.000 bytes de texto em UTF-8 (cerca de 2 MB). Letras acentuadas e emojis ocupam mais de um byte cada. Uma entrada maior é recusada.
- Resultado: também até 2.000.000 bytes. Se o resultado completo fosse maior, a ferramenta mostra apenas uma prévia incompleta dos primeiros 100.000 bytes, e essa prévia não pode ser copiada nem baixada.
- Aninhamento: até 256 níveis de objetos e listas (no cabeçalho ou no payload) dentro uns dos outros. Um JWT mais profundo é recusado porque passa do que a ferramenta processa.
- Tempo: uma execução que demora mais que o seu limite de tempo é interrompida. Tente uma entrada menor.
Meu texto é enviado para um servidor?
Não. O texto que você digita ou cola, ou abre de um arquivo local, é processado localmente no seu navegador, em um Web Worker dedicado. Ele nunca é enviado para o servidor (um arquivo que você abre é lido apenas no seu navegador) e não é gravado em armazenamento, cookies nem na barra de endereços.
“Copiar” coloca o resultado na área de transferência e “Baixar” o salva como arquivo, mas só quando você aperta o botão. O arquivo é criado no seu navegador, então nada é enviado.
Para ver os detalhes completos, consulte a Política de Privacidade
Ferramentas e páginas relacionadas
O seu texto continua na página quando você troca de ferramenta na mesma aba, então dá para testar o mesmo texto em outra. Recarregar ou fechar a aba o encerra.