mirror of
https://github.com/ZeroCatDev/ClassworksKV.git
synced 2025-12-07 13:03:09 +00:00
- Added refresh token support in the account model with new fields: refreshToken, refreshTokenExpiry, and tokenVersion. - Created a new token management utility (utils/tokenManager.js) for generating and verifying access and refresh tokens. - Updated JWT utility (utils/jwt.js) to maintain backward compatibility while introducing new token generation methods. - Enhanced middleware for JWT authentication to support new token types and automatic token refreshing. - Expanded API endpoints in routes/accounts.js to include refresh token functionality, logout options, and token info retrieval. - Introduced automatic token refresh mechanism in the front-end integration examples. - Comprehensive migration checklist and documentation for the new refresh token system. - Added database migration script to accommodate new fields in the Account table.
5.4 KiB
5.4 KiB
账户登录密钥系统重构完成报告
📋 项目概述
已成功重构ClassworksKV的账户登录密钥系统,从单一JWT令牌升级为标准的Refresh Token系统,大幅提升了安全性和用户体验。
✅ 完成的工作
1. 数据库架构更新
- 在
Account模型中添加了refreshToken、refreshTokenExpiry和tokenVersion字段 - 支持令牌版本控制,可快速失效所有设备的令牌
- 向后兼容现有数据
2. 核心Token管理系统
-
创建
utils/tokenManager.js: 全新的令牌管理核心- 生成Access Token(15分钟有效期)
- 生成Refresh Token(7天有效期)
- 支持HS256和RS256算法
- 令牌刷新和撤销功能
- 安全验证机制
-
重构
utils/jwt.js: 保持向后兼容性- 重新导出新的令牌管理功能
- 保留旧版API供现有代码使用
3. 认证中间件升级
- 更新
middleware/jwt-auth.js:- 支持新的Access Token验证
- 自动检测即将过期的令牌并在响应头提供新令牌
- 向后兼容旧版JWT令牌
- 新增可选认证中间件
4. API端点扩展
- 更新
routes/accounts.js:- OAuth回调现在返回令牌对(access_token + refresh_token)
- 新增
/api/accounts/refresh- 刷新访问令牌 - 新增
/api/accounts/logout- 单设备登出 - 新增
/api/accounts/logout-all- 全设备登出 - 新增
/api/accounts/token-info- 查看令牌状态
5. 安全特性
- 短期Access Token: 默认15分钟,降低泄露风险
- 长期Refresh Token: 默认7天,用户体验友好
- 令牌版本控制: 支持立即失效所有设备的令牌
- 自动刷新机制: 在令牌即将过期时自动提供新令牌
- 设备级管理: 支持单设备或全设备登出
📚 文档输出
1. 详细API文档
文件: REFRESH_TOKEN_API.md
- 完整的API接口说明
- 前端集成示例(JavaScript/React)
- 安全考虑和最佳实践
- 错误处理指南
- 性能优化建议
2. 快速使用指南
文件: REFRESH_TOKEN_QUICKSTART.md
- 环境配置说明
- 核心API使用方法
- 前端集成代码示例
- 迁移步骤指导
🔧 配置说明
环境变量
# Access Token配置
ACCESS_TOKEN_EXPIRES_IN=15m # 访问令牌过期时间
REFRESH_TOKEN_EXPIRES_IN=7d # 刷新令牌过期时间
# 密钥配置
JWT_SECRET=your-access-token-secret # Access Token密钥
REFRESH_TOKEN_SECRET=your-refresh-token-secret # Refresh Token密钥
# 可选:RSA算法配置
JWT_ALG=RS256
ACCESS_TOKEN_PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----..."
ACCESS_TOKEN_PUBLIC_KEY="-----BEGIN RSA PUBLIC KEY-----..."
REFRESH_TOKEN_PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----..."
REFRESH_TOKEN_PUBLIC_KEY="-----BEGIN RSA PUBLIC KEY-----..."
🚀 部署步骤
1. 数据库迁移
npx prisma migrate dev --name add_refresh_token_system
2. 环境变量更新
# 添加新的环境变量到 .env 文件
echo "ACCESS_TOKEN_EXPIRES_IN=15m" >> .env
echo "REFRESH_TOKEN_EXPIRES_IN=7d" >> .env
echo "REFRESH_TOKEN_SECRET=your-refresh-token-secret-change-this" >> .env
3. 前端更新
- 更新OAuth回调处理逻辑
- 实现Token刷新机制
- 添加自动重试逻辑
🔄 向后兼容性
- ✅ 现有JWT令牌继续有效
- ✅ 旧版API端点保持不变
- ✅ 渐进式迁移支持
- ✅ 中间件自动检测令牌类型
📊 系统架构
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ 前端应用 │ │ ClassworksKV │ │ 数据库 │
│ │ │ 服务端 │ │ │
├─────────────────┤ ├──────────────────┤ ├─────────────────┤
│ • Token存储 │◄──►│ • OAuth认证 │◄──►│ • Account表 │
│ • 自动刷新 │ │ • Token生成 │ │ • refreshToken │
│ • 请求拦截 │ │ • Token验证 │ │ • tokenVersion │
│ • 错误处理 │ │ • Token刷新 │ │ • 过期时间 │
└─────────────────┘ └──────────────────┘ └─────────────────┘
🛡️ 安全增强
改进前(旧系统)
- 单一JWT令牌
- 长期有效(7天)
- 泄露风险高
- 无法远程登出
改进后(新系统)
- 双令牌系统
- Access Token短期(15分钟)
- Refresh Token长期(7天)
- 令牌版本控制
- 设备级管理
- 自动刷新机制
📈 性能考虑
- 数据库: 为refreshToken字段添加索引
- 内存: Token缓存机制(可选)
- 网络: 预刷新机制减少延迟
- 存储: 定期清理过期令牌
🧪 测试建议
功能测试
- OAuth登录流程测试
- Token刷新功能测试
- 登出功能测试
- 过期处理测试
安全测试
- 令牌篡改测试
- 过期令牌测试
- 并发刷新测试
- 版本不匹配测试
📞 后续支持
- 监控令牌刷新频率
- 分析用户登录模式
- 优化过期时间配置
- 收集用户反馈
重构完成时间: 2025年11月1日 文档版本: v1.0 兼容性: 向后兼容,支持渐进式迁移