SuperAPI AI 工具集

auth-implementation-patterns

安全与审计

查看项目

更新于 10-16 05:38

技能介绍

用途

该技能用于构建安全、可扩展的认证与授权系统,采用行业标准模式和现代最佳实践。适用场景包括:实现用户认证系统、保护 REST 或 GraphQL API、添加 OAuth2/社交登录、实现基于角色的访问控制(RBAC)、设计会话管理、迁移认证系统、调试认证问题、实现 SSO 或多租户。

核心概念

认证与授权的区别

认证(AuthN):确认你是谁。包括验证身份(用户名/密码、OAuth、生物识别)、颁发凭证(会话、令牌)、管理登录/登出。

授权(AuthZ):确认你能做什么。包括权限检查、基于角色的访问控制(RBAC)、资源所有权验证、策略执行。

认证策略

基于会话:服务器存储会话状态,会话 ID 存于 Cookie,传统、简单、有状态。

基于令牌(JWT):无状态、自包含,可水平扩展,可存储声明。

OAuth2/OpenID Connect:委托认证,社交登录(Google、GitHub),企业 SSO。

主要能力

JWT 认证

JWT 结构为 header.payload.signature。提供生成 JWT(访问令牌短期有效,如 15 分钟;刷新令牌长期有效,如 7 天)、验证 JWT、认证中间件等实现。刷新令牌流程包括:将刷新令牌哈希后存入数据库、刷新访问令牌、撤销刷新令牌(登出)、撤销用户所有令牌(登出所有设备),并提供刷新和登出 API 端点。

基于会话的认证

使用 express-session 与 Redis 存储会话。配置包括:secure(生产环境仅 HTTPS)、httpOnly(禁止 JavaScript 访问)、maxAge(如 24 小时)、sameSite: 'strict'(CSRF 防护)。提供登录、会话中间件、受保护路由、登出等实现。

OAuth2 / 社交登录

使用 Passport.js 实现 Google 和 GitHub OAuth。包括查找或创建用户、认证路由、回调路由(生成 JWT 并重定向到前端)。

授权模式

基于角色的访问控制(RBAC):定义角色枚举(USER、MODERATOR、ADMIN)和角色层级,提供 hasRole 函数和 requireRole 中间件。

基于权限的访问控制:定义权限枚举(如 read:users、write:users、delete:users、read:posts、write:posts)和角色权限映射,提供 hasPermission 函数和 requirePermission 中间件。

资源所有权:检查用户是否拥有资源,管理员可访问任何资源,提供 requireOwnership 中间件。

安全最佳实践

密码安全:使用 zod 定义密码验证模式(至少 12 字符,包含大写、小写、数字、特殊字符),使用 bcrypt 哈希密码(saltRounds 为 12),提供注册接口。

速率限制:使用 express-rate-limit 和 Redis 存储,登录限制器(15 分钟 5 次尝试),API 限制器(每分钟 100 次请求)。

使用方式

该技能以代码模式形式提供,包含 TypeScript/JavaScript 示例,使用 Express、jsonwebtoken、bcrypt、express-session、connect-redis、redis、passport、passport-google-oauth20、passport-github2、zod、express-rate-limit、rate-limit-redis 等库。开发者可根据示例代码集成到自己的项目中。

最佳实践

  • 绝不存储明文密码:始终使用 bcrypt/argon2 哈希
  • 使用 HTTPS:加密传输中的数据
  • 短期访问令牌:最长 15-30 分钟
  • 安全 Cookie:httpOnly、secure、sameSite 标志
  • 验证所有输入:邮箱格式、密码强度
  • 对认证端点进行速率限制:防止暴力破解

限制

资料未提供该技能的具体安装命令、平台支持范围、收费信息或效果保证。