用途:为 SPA、移动应用或 API 构建无状态认证,支持自动刷新令牌而无需重新登录,并实现类似 OAuth 的令牌流程。
主要能力:采用双令牌架构。访问令牌短时效(15 分钟),携带用户声明,随每个请求发送,仅存于内存;刷新令牌长时效(7 天),仅用于获取新访问令牌,存于 httpOnly cookie,每次使用后轮换(一次性使用)。刷新流程中,旧刷新令牌失效并签发新令牌对;若检测到刷新令牌被重复使用,则撤销该用户全部令牌。提供 TypeScript 与 Python 的令牌服务实现,以及 Express 认证路由、认证中间件和前端 AuthClient 集成示例。
使用方式:登录时服务端签发访问令牌与刷新令牌,刷新令牌写入 httpOnly cookie,访问令牌返回响应体;客户端请求携带 Authorization: Bearer {access_token};访问令牌过期时调用 POST /auth/refresh(自动携带 cookie)获取新令牌对;登出时撤销刷新令牌并清除 cookie。前端在过期前 1 分钟自动刷新,并对并发刷新去重。
适用场景:需要无状态认证的 API、单页应用、移动应用,以及希望实现自动令牌续期与令牌轮换安全策略的项目。
限制与注意:资料未提供具体安装命令、依赖版本、收费或平台信息。示例依赖 jsonwebtoken、ioredis、crypto(TypeScript)与 PyJWT、redis(Python),需自行配置 Redis 存储刷新令牌。安全要求包括访问令牌时效不超过 15 分钟、刷新令牌仅存 httpOnly cookie、访问令牌仅存内存、每次使用轮换刷新令牌、检测令牌重用、设置 secure 与 sameSite 等 cookie 标志,生产环境仅用 HTTPS。常见错误包括将令牌存入 localStorage、访问令牌时效过长、不轮换刷新令牌、不检测刷新令牌重用、每个请求都发送刷新令牌。