用途:在后端实现 JWT 认证,覆盖令牌生成、校验、刷新令牌轮换、吊销和安全存储;适合构建基于令牌的认证方案。
主要能力与决策要点:
- 算法选择:禁止使用 alg: none,必须显式白名单算法,如 jwt.decode(token, secret, algorithms=["HS256"])。HS256 适合单服务签发与校验;RS256/ES256 为非对称方案,多服务可仅持公钥验证。HS256 密钥建议至少 256 位,用 openssl rand -base64 32 生成。
- 令牌架构:短期访问令牌 5–15 分钟,无状态;长期刷新令牌 7–30 天、不透明、服务端存储,每次使用必须轮换。刷新令牌不要做成 JWT。
- 生成与校验:必要声明包括 sub、iat、exp、jti;不要放密码、多余 PII、可变数据;一般省略 nbf。校验顺序:格式、算法白名单、签名、exp(允许约 30 秒时钟偏差)、nbf、iss、aud、jti 黑名单。
- 刷新轮换与盗用检测:刷新令牌哈希存储,带 family_id;旧令牌被再次使用即吊销整个家族。轮换写入后需处理响应失败导致的锁定,可用宽限窗口或幂等键。
- 吊销:可接受不可吊销(短访问令牌 + 删除刷新令牌);或用 Redis 按 jti 设置 TTL 黑名单;或使用 token_version。不要用 Postgres 做逐请求黑名单查询。
- 存储:浏览器用 HttpOnly + Secure + SameSite=Strict Cookie,不用 localStorage;移动端用 Keychain 或 EncryptedSharedPreferences;服务间用环境变量或密钥管理服务。
- 时钟同步:验证方需 NTP 同步,容忍 30 秒以内。
限制与说明:资料未提供具体价格、平台支持范围或效果数据;实施需结合目标框架与客户端类型调整。