Glossário · Testes de API
JWT (JSON Web Token)
Em inglês: JWT
Também chamado de: JWTs, JSON Web Token, JSON Web Tokens, token JWT
Definição
Um JSON Web Token é um token compacto e assinado no formato header.payload.signature que carrega claims como id do usuário, expiração e audiência.
Um JSON Web Token (JWT, muitas vezes pronunciado “jót” em inglês) é uma string com três partes codificadas em Base64url separadas por pontos: um header que diz como ele foi assinado, um payload com claims e uma assinatura. As APIs normalmente o recebem no header Authorization: Bearer <token> e verificam a assinatura para confiar nas claims sem consultar o banco de dados. Muitos provedores de OAuth 2.0 e OpenID Connect emitem access tokens e ID tokens no formato JWT.
Exemplo
Um payload decodificado:
{
"iss": "https://auth.example.com",
"sub": "user_7f3a",
"aud": "orders-api",
"role": "member",
"iat": 1767225600,
"exp": 1767229200
}
iss é o emissor, sub o sujeito (normalmente o usuário), aud o destinatário pretendido e iat/exp os horários de emissão e de expiração em segundos desde a época Unix. Ler o payload no Node 22 não exige nenhuma biblioteca:
const [, payload] = token.split('.');
const claims = JSON.parse(Buffer.from(payload, 'base64url').toString('utf8'));
Codificado, não criptografado
Um JWT assinado padrão (um JWS) é codificado, não criptografado. Qualquer pessoa que tenha o token consegue ler todas as claims, como o trecho acima mostra. A assinatura só prova que o token foi emitido por alguém com a chave e que não foi alterado. Por isso, nunca coloque segredos ou dados pessoais no payload de um JWT, a menos que o token seja de fato criptografado (um JWE, um formato separado e menos comum). Decodificar um token não é o mesmo que validá-lo: um teste que só decodifica um token não verificou nada sobre a autenticidade dele.
O que testar
- Token expirado: defina ou espere o
exppassar e espere um401. - Payload adulterado: troque
roleparaadmin, mantenha a assinatura antiga e espere401. Se for aceito, o servidor não está verificando assinaturas. alg: none: um token sem assinatura precisa ser rejeitado.- Audiência ou emissor errados: um token válido para outra API não deve funcionar aqui.
- Token válido, permissões erradas: espere
403, não401, porque o usuário está autenticado mas não autorizado. - Logout e revogação: JWTs normalmente continuam válidos até expirar, então verifique o que o sistema faz depois de um logout ou de uma troca de senha. Expiração curta mais refresh tokens é a mitigação mais comum.