Higiene JWT (todos validados ao vivo)
DESTRUTIVO — só em localhost/lab. Nunca em produção. Só em alvo seu ou autorizado por escrito.
Os passos
12.1 alg:none: header {alg:"none"} + payload + assinatura vazia → 401 ✅.
12.2 Sem exp: payload {sub,role,iat} com secret real → 200 ETERNO → 🔴 achado 8 (fix de 1 linha: rejeitar sem exp).
12.3 Expirado: exp há 1 ano → 401 ✅.
12.4 Quebra offline: dicionário no HMAC → secret de 43 chars resiste ✅ (mas vive no repo → P0).
12.5 Design futuro: API keys (prefixo+hash+escopo+revogação) e RS256+JWKS por módulo.