Authentication Patterns 是一套面向开发者的认证与授权模式参考,内容以 TypeScript 代码示例为主,覆盖从令牌签发、请求鉴权到第三方登录与权限模型的常见做法。
用途 该模式集合用于指导在 Web 服务中实现身份认证与授权,包括用户登录后的令牌管理、接口访问控制、基于角色的权限判定,以及通过 OAuth2 接入外部身份提供方。
主要能力
- JWT 访问令牌与刷新令牌:示例展示使用 jsonwebtoken 签发访问令牌(有效期 15 分钟,包含 sub、email、roles 等载荷,issuer 为 auth-service)与刷新令牌(有效期 7 天,包含 sub 与 tokenVersion),并提供 verifyAccessToken 校验函数。资料建议将刷新令牌存放在 HTTP-only Cookie 中。
- 认证中间件:authenticate 中间件从 Authorization 头读取 Bearer 令牌并校验,区分“令牌过期”与“令牌无效”两种错误;authorize 中间件接收角色列表,检查当前用户角色是否匹配,不匹配返回 403。示例中将其用于 /admin/users 路由。
- OAuth2 授权码流程与 PKCE:示例使用 crypto 生成 code verifier 与 SHA-256 的 code challenge,构造包含 response_type、client_id、redirect_uri、scope、code_challenge、code_challenge_method=S256、state 的授权请求,并在回调中携带 code_verifier 向令牌端点换取令牌,再解析 id_token 获取用户信息。
- RBAC 模型:定义 Permission 结构(resource 与 create/read/update/delete 动作),给出 viewer、editor、admin 三种角色的权限映射,admin 使用通配符资源;hasPermission 函数按角色与资源、动作判断是否放行。
- 反模式清单:列出将 JWT 存入 localStorage、跨服务使用对称密钥、不校验 iss/aud/exp、自行实现密码哈希、Cookie 认证缺少 CSRF 防护、登录错误信息区分“用户不存在”与“密码错误”等常见问题。
- 检查清单:包括访问令牌短有效期(15 分钟以内)、刷新令牌存放于 HTTP-only/Secure/SameSite Cookie、密码使用 bcrypt 或 argon2 哈希、公共客户端使用 OAuth2 PKCE、RBAC 在路由与数据访问两层校验、通过版本计数器或黑名单支持令牌吊销、Cookie 认证启用 CSRF 防护、认证错误不泄露用户是否存在。
使用方式 资料以代码片段形式呈现,开发者可参照示例在 Node.js/TypeScript 项目中引入 jsonwebtoken、crypto 等依赖,按需实现令牌签发与校验、中间件、OAuth2 回调与权限判断逻辑。示例中涉及的环境变量(如 JWT_SECRET、REFRESH_SECRET、OAUTH_CLIENT_ID、OAUTH_AUTHORIZE_URL、OAUTH_TOKEN_URL、APP_URL)需由使用方自行配置。
适用场景 适用于需要实现登录鉴权、接口权限控制、角色权限管理或第三方 OAuth2 登录的后端服务与全栈应用。
限制 资料未提供完整的项目结构、依赖安装命令、运行步骤、测试方式或部署说明;示例代码为片段,未包含完整错误处理与生产环境配置细节。具体收费、平台支持与效果数据暂未提供。