accounts/TOKEN_AUTH_SUMMARY.md
Haitao Pan b3bdbc1a80 feat(auth): implement token authentication system across services
- Add token service and MFA service to account service
- Implement auth middleware for request validation
- Add token-based auth to dashboard and RAG server
- Update configuration files for auth settings
2025-11-05 19:28:23 +08:00

4.8 KiB

Token Auth 双层签发 - 实现总结

🎉 完成项目

本项目成功实现了 Public + Refresh + JWT access_token 三层认证机制,涵盖 Go 后端和 Deno 前端。

📁 已创建文件

1. 配置文件更新

dashboard-fresh/config/runtime-service-config.base.yaml

  • 添加 auth.token 配置块
  • 使用固定 Public Token 和 Refresh Secret

account/config/account.yaml

  • 添加 auth.token 配置块
  • 与 Dashboard 配置保持一致

rag-server/config/server.yaml

  • 添加 auth.token 配置块
  • 与其他服务配置一致

2. Go 后端实现 (account/)

internal/auth/token_service.go - 142 行

  • TokenService 结构体
  • JWT 签发、验证、刷新
  • Public Token 验证
  • 支持 MFA 状态

internal/auth/mfa_service.go - 60 行

  • TOTP 生成和验证
  • QR 码生成
  • 备用码管理

internal/auth/middleware.go - 108 行

  • 身份验证中间件
  • MFA 验证中间件
  • 角色验证中间件
  • 上下文提取函数

3. Go 后端实现 (rag-server/)

internal/auth/token_service.go - 120 行

  • 适配 RAG 服务的 Token 服务
  • 服务标识区分

internal/auth/middleware.go - 84 行

  • 身份验证中间件
  • 角色验证中间件

4. Deno 前端实现 (dashboard-fresh/)

lib/auth/token_service.ts - 180 行

  • Token 管理类
  • 自动令牌刷新
  • Token 解码和验证
  • authFetch 包装函数

lib/auth/use_auth.ts - 98 行

  • React Hook
  • 登录/登出功能
  • 自动令牌管理
  • 角色检查

5. 文档和脚本

TOKEN_AUTH_MANUAL.md - 完整维护手册 (450+ 行)

  • 架构设计说明
  • API 接口文档
  • 安全最佳实践
  • 故障排除指南
  • 监控和告警
  • 维护任务清单

IMPLEMENTATION_GUIDE.md - 实现指南 (200+ 行)

  • 快速开始
  • 使用示例
  • 常见问题
  • 集成指导

scripts/update_token_auth.sh - 自动更新脚本 (280+ 行)

  • 生成新密钥
  • 密钥轮换
  • 配置验证
  • 备份管理
  • 预览模式

TOKEN_AUTH_SUMMARY.md - 本文件

🔑 密钥配置

所有服务使用统一的密钥配置:

auth:
  token:
    publicToken: "xcontrol-public-token-2024"
    refreshSecret: "xcontrol-refresh-secret-2024"

🏗️ 架构特性

三层认证机制

  1. Public Token (最外层)

    • 固定值,配置在 YAML 文件中
    • 用于初次身份验证
  2. Refresh Token (中间层)

    • JWT 格式
    • 长期有效 (7-30 天)
    • 用于获取新的 Access Token
  3. Access Token (最内层)

    • JWT 格式
    • 短期有效 (15-60 分钟)
    • 用于 API 调用

安全特性

  • HS256 JWT 签名
  • issuer 和 audience 验证
  • 自动令牌刷新
  • MFA 支持
  • 角色基础访问控制
  • 过期时间管理

🚀 使用示例

Go 服务初始化

tokenService := auth.NewTokenService(auth.TokenConfig{
    PublicToken:    "xcontrol-public-token-2024",
    RefreshSecret:  "xcontrol-refresh-secret-2024",
    AccessSecret:   "xcontrol-access-secret-2024",
    AccessExpiry:   time.Hour,
    RefreshExpiry:  time.Hour * 24 * 7,
})

// 使用中间件保护路由
r.Use(tokenService.AuthMiddleware())

前端 Hook 使用

const { user, login, logout } = useAuth();

// 登录
await login('user@example.com', 'password');

// 自动刷新
await tokenService.ensureValidToken();

// 发起带认证的请求
const response = await authFetch('/api/data');

📋 维护操作

验证配置一致性

bash scripts/update_token_auth.sh --validate

生成新密钥

bash scripts/update_token_auth.sh --generate-new

轮换密钥

bash scripts/update_token_auth.sh --rotate

预览模式

bash scripts/update_token_auth.sh --rotate --dry-run

📊 测试结果

配置验证通过 脚本运行正常 所有文件创建成功

🔄 后续步骤

  1. 添加依赖

    cd account && go mod tidy
    cd rag-server && go mod tidy
    
  2. 集成到现有服务

    • 在 API 处理器中注入 TokenService
    • 在路由中应用中间件
    • 更新配置文件
  3. 前端集成

    • 导入 useAuth Hook
    • 包装 API 调用
    • 处理认证状态
  4. 测试

    • 单元测试
    • 集成测试
    • 端到端测试

📚 更多文档

  • 完整手册: TOKEN_AUTH_MANUAL.md
  • 实现指南: IMPLEMENTATION_GUIDE.md
  • API 文档: 见维护手册

特性亮点

  • 🔐 三层安全认证
  • 🔄 自动令牌刷新
  • 🎯 角色基础访问控制
  • 📱 多因素认证支持
  • 🛡️ 安全最佳实践
  • 📖 完整文档和示例
  • 🔧 自动化维护脚本

📞 支持

如有问题,请参考:

  1. 完整维护手册
  2. 实现指南
  3. 常见问题解答

项目状态: 完成 创建日期: 2025-11-05 版本: v1.0