Autenticação e Autorização: Você está implementando autenticação baseada em JSON Web Tokens (JWT) em uma API. O token é assinado com o algoritmo HS256 (HMAC-SHA256). Qual das opções a seguir representa uma boa prática de segurança ao lidar com JWT?
Você está implementando autenticação baseada em JSON Web Tokens (JWT) em uma API. O token é assinado com o algoritmo HS256 (HMAC-SHA256). Qual das opções a seguir representa uma boa prática de segurança ao lidar com JWT?
Confiar no payload do JWT sem validar a assinatura, desde que o token tenha sido emitido pela própria API.
Armazenar a chave secreta HMAC diretamente no repositório de código para facilitar o ciclo de deploy.
Aceitar tokens cujo cabeçalho declare "alg": "none", desde que o client seja confiável.
Definir um tempo de expiração curto (exp) e rejeitar tokens expirados durante a validação.
Incluir senhas e outros dados sensíveis no payload, pois o JWT é criptografado por padrão.
Para JWT assinado com HS256 (HMAC-SHA256), a segurança depende de validar a assinatura e de aplicar corretamente as claims de segurança (como expiração).
Analisando as alternativas:
- Confiar no payload sem validar assinatura é inseguro: qualquer pessoa pode alterar o payload e forjar informações se a assinatura não for verificada.
- Guardar a chave secreta no repositório é má prática: expõe o segredo (vazamentos, logs, acessos indevidos). O correto é usar um secret manager / variáveis de ambiente protegidas.
- Aceitar
"alg": "none"é uma vulnerabilidade clássica (bypass de assinatura): tokens sem assinatura não devem ser aceitos. - Definir expiração curta (
exp) e rejeitar tokens expirados reduz a janela de uso indevido em caso de roubo do token e é uma boa prática recomendada. - JWT não é criptografado por padrão (geralmente é apenas assinado/JWS). Portanto, incluir senhas/dados sensíveis no payload é incorreto.
Logo, a melhor prática listada é a de expiração curta e validação de expiração.
Alternativa correta: (D).