直接回答:经典误用清单:接受 alg=none(去掉签名校验直接信任 payload);RS256 降级为 HS256 后用公钥当 HMAC 密钥验签(混淆攻击);不校验 exp/iss/aud,令牌过期或跨服务混用;把敏感信息塞进 payload(base64 不是加密,谁都能读);密钥强度不足被离线爆破;以及最大的架构误用——把 JWT 当万能会话,需要踢人/改权限时发现无状态令牌无法吊销。
展开解析:对应防御:验签库必须显式指定算法白名单,禁止从令牌头部取 alg 决定验证方式;校验 exp、nbf、iss、aud 全套声明;payload 只放身份与少量声明,敏感数据服务端查;签名密钥用足够熵的随机值并纳入密钥管理。架构层面想清楚无状态的代价:登出、封禁、权限变更都依赖令牌自然过期,缓解方案是短有效期(分钟级)access token 加 refresh token 旋转,refresh 端可查黑名单;或干脆关键场景回到服务端会话。存储位置也有讲究:浏览器里 HttpOnly Cookie 加 SameSite 优于 localStorage(XSS 可直接读后者)。最后一条纪律:只用经过审计的成熟库,别手写 JWT 解析。
追问方向:refresh token 旋转如何检测重放?JWE 与 JWS 的区别?kid 注入是什么攻击?
(约 440 字)