Files
taiji-AI-PAD/Docs/项目文档/认证及后台管理系统设计.md
T
xiaohei 0fa39fbd61 docs: 添加认证及后台管理系统设计文档
设计内容:
- 系统概述和目标
- 架构设计(模块划分、系统架构图)
- 认证系统设计(登录流程、Token管理、密码安全)
- 权限管理系统(RBAC、角色定义、权限检查)
- 后台管理功能(用户管理、Agent管理、系统监控、审计日志)
- API设计(认证API、后台管理API)
- 数据库设计(表结构设计)
- 安全设计(认证安全、权限安全、数据安全)
- 实施计划(5个阶段,8-13天)
- 技术选型
- 后续扩展计划
- 风险评估

版本: v1.0
2025-12-22 09:42:35 +00:00

865 lines
22 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# taiji-AI-PAD 认证及后台管理系统设计文档
**版本**: v1.0
**创建时间**: 2025年12月22日
**设计者**: 项目组
---
## 📋 目录
1. [系统概述](#系统概述)
2. [架构设计](#架构设计)
3. [认证系统设计](#认证系统设计)
4. [权限管理系统](#权限管理系统)
5. [后台管理功能](#后台管理功能)
6. [API 设计](#api-设计)
7. [数据库设计](#数据库设计)
8. [安全设计](#安全设计)
9. [实施计划](#实施计划)
---
## 1. 系统概述
### 1.1 目标
构建一个完整的认证和后台管理系统,包括:
- 用户认证(登录、注册、密码管理)
- 基于角色的权限控制(RBAC)
- 后台管理界面和 API
- 审计日志和操作追踪
- API Key 管理
- 多租户支持
### 1.2 核心功能
#### 认证功能
- ✅ 用户注册/登录
- ✅ JWT Token 认证
- ✅ 密码加密存储(bcrypt)
- ✅ Token 刷新机制
- ✅ 密码重置
- ✅ 账户激活/禁用
#### 权限管理
- ✅ 基于角色的访问控制(RBAC)
- ✅ 权限粒度控制
- ✅ API Key 权限管理
- ✅ 资源级别的权限控制
#### 后台管理
- ✅ 用户管理(CRUD)
- ✅ Agent 管理
- ✅ 工具管理
- ✅ 系统监控
- ✅ 审计日志查看
- ✅ 计费管理
- ✅ 系统配置
---
## 2. 架构设计
### 2.1 系统架构图
```
┌─────────────────────────────────────────────────────────┐
│ 前端层 (Admin UI) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 登录页面 │ │ 用户管理 │ │ Agent管理 │ │ 系统监控 │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└──────────────────────┬──────────────────────────────────┘
│ HTTPS
▼
┌─────────────────────────────────────────────────────────┐
│ API Gateway (Nginx) │
│ ┌──────────────────────────┐ │
│ │ 认证中间件 (JWT验证) │ │
│ │ 权限检查中间件 (RBAC) │ │
│ └──────────────────────────┘ │
└──────────────────────┬──────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ MCP Server (FastAPI) │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ 认证模块 │ │ 权限管理模块 │ │ 后台管理模块 │ │
│ │ - 登录/注册 │ │ - RBAC │ │ - 用户管理 │ │
│ │ - JWT Token │ │ - 权限检查 │ │ - Agent管理 │ │
│ │ - 密码管理 │ │ - API Key │ │ - 系统监控 │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
└──────────────────────┬──────────────────────────────────┘
│
┌───────────────┼───────────────┐
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ PostgreSQL │ │ Redis │ │ NATS │
│ - 用户数据 │ │ - Token缓存 │ │ - 事件发布 │
│ - 权限数据 │ │ - 会话管理 │ │ - 审计日志 │
│ - 审计日志 │ │ - 限流数据 │ │ │
└──────────────┘ └──────────────┘ └──────────────┘
```
### 2.2 模块划分
#### 2.2.1 认证模块 (`auth.py`)
- 用户注册/登录
- JWT Token 生成和验证
- 密码加密和验证
- Token 刷新
- 密码重置
#### 2.2.2 权限模块 (`permissions.py`)
- 角色定义和管理
- 权限检查装饰器
- API Key 权限验证
- 资源权限验证
#### 2.2.3 后台管理模块 (`admin.py`)
- 用户管理 API
- Agent 管理 API
- 工具管理 API
- 系统监控 API
- 审计日志 API
#### 2.2.4 审计模块 (`audit.py`)
- 操作日志记录
- 登录日志
- API 调用日志
- 异常日志
---
## 3. 认证系统设计
### 3.1 认证流程
#### 3.1.1 用户登录流程
```
用户 → 提交用户名/密码
↓
验证用户名和密码 (bcrypt)
↓
生成 JWT Token (包含用户ID、角色、权限)
↓
返回 Token 和用户信息
↓
客户端存储 Token (localStorage/cookie)
↓
后续请求携带 Token (Authorization Header)
↓
服务器验证 Token
↓
允许/拒绝访问
```
#### 3.1.2 Token 结构
```json
{
"sub": "user_id",
"username": "admin",
"email": "admin@example.com",
"roles": ["admin", "user"],
"permissions": ["user:read", "user:write", "agent:manage"],
"iat": 1234567890,
"exp": 1234571490,
"type": "access" // access 或 refresh
}
```
### 3.2 密码安全
- **加密算法**: bcrypt (cost factor: 12)
- **密码要求**:
- 最小长度: 8 字符
- 必须包含: 大小写字母、数字
- 可选: 特殊字符
- **密码重置**:
- 通过邮箱发送重置链接
- 重置链接有效期: 1 小时
- 使用临时 Token
### 3.3 Token 管理
- **Access Token**:
- 有效期: 60 分钟
- 用途: API 访问认证
- **Refresh Token**:
- 有效期: 7 天
- 用途: 刷新 Access Token
- 存储: Redis (可撤销)
- **Token 撤销**:
- 登出时撤销 Refresh Token
- 支持强制撤销所有 Token
---
## 4. 权限管理系统
### 4.1 角色定义
#### 4.1.1 系统角色
| 角色 | 描述 | 权限范围 |
|------|------|----------|
| **super_admin** | 超级管理员 | 所有权限 |
| **admin** | 管理员 | 用户管理、Agent管理、系统配置 |
| **developer** | 开发者 | Agent创建、工具使用、API调用 |
| **user** | 普通用户 | 基础功能、自己的Agent |
| **viewer** | 只读用户 | 查看权限,无修改权限 |
#### 4.1.2 权限定义
```
资源:操作 格式
用户权限:
- user:read - 查看用户
- user:write - 创建/修改用户
- user:delete - 删除用户
- user:manage - 完整用户管理
Agent权限:
- agent:read - 查看Agent
- agent:write - 创建/修改Agent
- agent:delete - 删除Agent
- agent:execute - 执行Agent
- agent:manage - 完整Agent管理
工具权限:
- tool:read - 查看工具
- tool:write - 创建/修改工具
- tool:delete - 删除工具
- tool:use - 使用工具
系统权限:
- system:read - 查看系统信息
- system:config - 系统配置
- system:monitor - 系统监控
- audit:read - 查看审计日志
```
### 4.2 权限检查机制
#### 4.2.1 装饰器方式
```python
@require_permission("agent:manage")
async def create_agent(...):
pass
@require_role("admin")
async def admin_function(...):
pass
```
#### 4.2.2 依赖注入方式
```python
from auth import get_current_user, require_permission
async def endpoint(
current_user: User = Depends(get_current_user),
_: None = Depends(require_permission("agent:read"))
):
pass
```
### 4.3 API Key 权限
- **API Key 类型**:
- `readonly`: 只读权限
- `write`: 读写权限
- `admin`: 管理员权限
- **API Key 限制**:
- 速率限制
- IP 白名单
- 过期时间
---
## 5. 后台管理功能
### 5.1 用户管理
#### 功能列表
- ✅ 用户列表(分页、搜索、筛选)
- ✅ 创建用户
- ✅ 编辑用户信息
- ✅ 禁用/启用用户
- ✅ 重置用户密码
- ✅ 查看用户详情
- ✅ 用户权限管理
- ✅ 用户 Agent 列表
- ✅ 用户使用统计
#### 数据展示
- 用户基本信息
- 注册时间、最后登录时间
- 状态(活跃/禁用)
- 角色和权限
- Agent 数量
- API 调用统计
### 5.2 Agent 管理
#### 功能列表
- ✅ Agent 列表(分页、搜索、筛选)
- ✅ 查看 Agent 详情
- ✅ 编辑 Agent 配置
- ✅ 启用/禁用 Agent
- ✅ 删除 Agent
- ✅ Agent 执行历史
- ✅ Agent 性能统计
- ✅ Agent 权限管理
#### 数据展示
- Agent 基本信息
- 所属用户
- 状态和版本
- 执行统计(总数、成功率、平均耗时)
- 工具列表
- 配置信息
### 5.3 工具管理
#### 功能列表
- ✅ 工具列表(分页、搜索、筛选)
- ✅ 工具详情查看
- ✅ 工具分类管理
- ✅ 工具权限配置
- ✅ 工具使用统计
- ✅ 工具健康检查
### 5.4 系统监控
#### 功能列表
- ✅ 系统健康状态
- ✅ 服务运行状态(Redis、NATS、数据库)
- ✅ 实时指标(请求数、响应时间、错误率)
- ✅ 资源使用情况(CPU、内存、磁盘)
- ✅ 活跃用户数
- ✅ API 调用统计
- ✅ 错误日志查看
### 5.5 审计日志
#### 功能列表
- ✅ 操作日志列表(分页、搜索、筛选)
- ✅ 登录日志
- ✅ API 调用日志
- ✅ 异常日志
- ✅ 日志导出
- ✅ 日志统计分析
#### 日志内容
- 操作时间
- 操作用户
- 操作类型
- 操作对象
- 操作结果
- IP 地址
- User Agent
### 5.6 计费管理
#### 功能列表
- ✅ 用户计费记录
- ✅ 计费统计
- ✅ 账单生成
- ✅ 配额管理
- ✅ 使用量统计
---
## 6. API 设计
### 6.1 认证 API
#### 6.1.1 用户注册
```
POST /api/v1/auth/register
Request:
{
"username": "string",
"email": "string",
"password": "string",
"full_name": "string"
}
Response:
{
"user_id": "uuid",
"username": "string",
"email": "string",
"message": "注册成功"
}
```
#### 6.1.2 用户登录
```
POST /api/v1/auth/login
Request:
{
"username": "string",
"password": "string"
}
Response:
{
"access_token": "string",
"refresh_token": "string",
"token_type": "bearer",
"expires_in": 3600,
"user": {
"id": "uuid",
"username": "string",
"email": "string",
"roles": ["string"],
"permissions": ["string"]
}
}
```
#### 6.1.3 Token 刷新
```
POST /api/v1/auth/refresh
Headers:
Authorization: Bearer <refresh_token>
Response:
{
"access_token": "string",
"token_type": "bearer",
"expires_in": 3600
}
```
#### 6.1.4 用户登出
```
POST /api/v1/auth/logout
Headers:
Authorization: Bearer <access_token>
Response:
{
"message": "登出成功"
}
```
#### 6.1.5 密码重置
```
POST /api/v1/auth/password/reset
Request:
{
"email": "string"
}
Response:
{
"message": "重置链接已发送到邮箱"
}
POST /api/v1/auth/password/reset/confirm
Request:
{
"token": "string",
"new_password": "string"
}
Response:
{
"message": "密码重置成功"
}
```
### 6.2 后台管理 API
#### 6.2.1 用户管理
```
GET /api/v1/admin/users # 用户列表
GET /api/v1/admin/users/{user_id} # 用户详情
POST /api/v1/admin/users # 创建用户
PUT /api/v1/admin/users/{user_id} # 更新用户
DELETE /api/v1/admin/users/{user_id} # 删除用户
POST /api/v1/admin/users/{user_id}/disable # 禁用用户
POST /api/v1/admin/users/{user_id}/enable # 启用用户
POST /api/v1/admin/users/{user_id}/reset-password # 重置密码
GET /api/v1/admin/users/{user_id}/agents # 用户Agent列表
GET /api/v1/admin/users/{user_id}/stats # 用户统计
```
#### 6.2.2 Agent 管理
```
GET /api/v1/admin/agents # Agent列表
GET /api/v1/admin/agents/{agent_id} # Agent详情
PUT /api/v1/admin/agents/{agent_id} # 更新Agent
DELETE /api/v1/admin/agents/{agent_id} # 删除Agent
POST /api/v1/admin/agents/{agent_id}/disable # 禁用Agent
POST /api/v1/admin/agents/{agent_id}/enable # 启用Agent
GET /api/v1/admin/agents/{agent_id}/executions # 执行历史
GET /api/v1/admin/agents/{agent_id}/stats # 性能统计
```
#### 6.2.3 系统监控
```
GET /api/v1/admin/system/health # 系统健康
GET /api/v1/admin/system/metrics # 系统指标
GET /api/v1/admin/system/stats # 系统统计
GET /api/v1/admin/system/logs # 系统日志
```
#### 6.2.4 审计日志
```
GET /api/v1/admin/audit/logs # 审计日志列表
GET /api/v1/admin/audit/logs/{log_id} # 日志详情
GET /api/v1/admin/audit/login-logs # 登录日志
GET /api/v1/admin/audit/api-logs # API调用日志
GET /api/v1/admin/audit/error-logs # 错误日志
POST /api/v1/admin/audit/logs/export # 导出日志
```
---
## 7. 数据库设计
### 7.1 用户表 (users) - 已有
```sql
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
username VARCHAR(50) UNIQUE NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL,
hashed_password VARCHAR(255) NOT NULL,
full_name VARCHAR(100),
is_active BOOLEAN DEFAULT TRUE,
is_admin BOOLEAN DEFAULT FALSE,
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW()
);
```
### 7.2 角色表 (roles) - 新增
```sql
CREATE TABLE roles (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name VARCHAR(50) UNIQUE NOT NULL,
description TEXT,
is_system BOOLEAN DEFAULT FALSE, -- 系统角色不可删除
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW()
);
```
### 7.3 权限表 (permissions) - 新增
```sql
CREATE TABLE permissions (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
resource VARCHAR(50) NOT NULL, -- user, agent, tool, system
action VARCHAR(50) NOT NULL, -- read, write, delete, manage
description TEXT,
created_at TIMESTAMP DEFAULT NOW(),
UNIQUE(resource, action)
);
```
### 7.4 用户角色关联表 (user_roles) - 新增
```sql
CREATE TABLE user_roles (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
role_id UUID NOT NULL REFERENCES roles(id) ON DELETE CASCADE,
assigned_at TIMESTAMP DEFAULT NOW(),
assigned_by UUID REFERENCES users(id),
UNIQUE(user_id, role_id)
);
```
### 7.5 角色权限关联表 (role_permissions) - 新增
```sql
CREATE TABLE role_permissions (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
role_id UUID NOT NULL REFERENCES roles(id) ON DELETE CASCADE,
permission_id UUID NOT NULL REFERENCES permissions(id) ON DELETE CASCADE,
granted_at TIMESTAMP DEFAULT NOW(),
UNIQUE(role_id, permission_id)
);
```
### 7.6 API Key 表 (api_keys) - 已有,需增强
```sql
CREATE TABLE api_keys (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
key_hash VARCHAR(255) NOT NULL, -- 存储哈希值
name VARCHAR(100), -- Key名称
permissions JSONB, -- 权限列表
rate_limit INTEGER DEFAULT 100, -- 速率限制
ip_whitelist TEXT[], -- IP白名单
expires_at TIMESTAMP, -- 过期时间
last_used_at TIMESTAMP,
is_active BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW()
);
```
### 7.7 审计日志表 (audit_logs) - 已有,需增强
```sql
CREATE TABLE audit_logs (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID REFERENCES users(id),
action VARCHAR(50) NOT NULL, -- login, logout, create, update, delete
resource_type VARCHAR(50), -- user, agent, tool, system
resource_id UUID,
details JSONB, -- 详细信息
ip_address INET,
user_agent TEXT,
status VARCHAR(20), -- success, failure, error
error_message TEXT,
created_at TIMESTAMP DEFAULT NOW()
);
```
---
## 8. 安全设计
### 8.1 认证安全
- **密码安全**:
- bcrypt 加密(cost factor: 12)
- 密码复杂度要求
- 密码历史记录(防止重复使用)
- **Token 安全**:
- JWT 签名验证
- Token 过期时间
- Refresh Token 轮换
- Token 黑名单(Redis)
### 8.2 权限安全
- **最小权限原则**: 默认无权限,需要显式授权
- **权限继承**: 角色权限可继承
- **资源级权限**: 支持资源级别的权限控制
- **API Key 安全**:
- Key 哈希存储
- 速率限制
- IP 白名单
- 过期时间
### 8.3 数据安全
- **SQL 注入防护**: 使用 ORM 参数化查询
- **XSS 防护**: 输入验证和输出转义
- **CSRF 防护**: Token 验证
- **敏感数据加密**:
- 密码: bcrypt
- API Key: 哈希存储
- 配置信息: 环境变量
### 8.4 审计安全
- **操作日志**: 所有关键操作记录
- **登录日志**: 记录所有登录尝试
- **异常监控**: 记录异常和错误
- **日志保留**: 至少保留 90 天
---
## 9. 实施计划
### 9.1 第一阶段:基础认证(1-2天)
**任务清单**:
- [ ] 创建认证模块 (`auth.py`)
- [ ] 密码加密和验证函数
- [ ] JWT Token 生成和验证
- [ ] 登录/注册 API
- [ ] Token 刷新 API
- [ ] 创建认证中间件
- [ ] JWT 验证中间件
- [ ] 用户信息注入
- [ ] 更新数据库模型
- [ ] 确认 User 模型
- [ ] 创建 Role、Permission 模型
- [ ] 创建关联表
- [ ] 创建认证 API 端点
- [ ] POST /api/v1/auth/register
- [ ] POST /api/v1/auth/login
- [ ] POST /api/v1/auth/refresh
- [ ] POST /api/v1/auth/logout
**预计工作量**: 1-2 天
### 9.2 第二阶段:权限管理(2-3天)
**任务清单**:
- [ ] 创建权限模块 (`permissions.py`)
- [ ] 角色定义和管理
- [ ] 权限检查装饰器
- [ ] 权限验证函数
- [ ] 初始化系统角色和权限
- [ ] 创建系统角色(super_admin, admin, developer, user, viewer)
- [ ] 创建系统权限
- [ ] 分配角色权限
- [ ] 创建权限管理 API
- [ ] 角色管理 API
- [ ] 权限管理 API
- [ ] 用户角色分配 API
- [ ] 实现权限检查中间件
- [ ] 装饰器方式
- [ ] 依赖注入方式
**预计工作量**: 2-3 天
### 9.3 第三阶段:后台管理 API(3-4天)
**任务清单**:
- [ ] 创建后台管理模块 (`admin.py`)
- [ ] 用户管理 API
- [ ] Agent 管理 API
- [ ] 工具管理 API
- [ ] 系统监控 API
- [ ] 实现审计日志模块 (`audit.py`)
- [ ] 日志记录函数
- [ ] 日志查询 API
- [ ] 日志导出功能
- [ ] 创建后台管理 API 端点
- [ ] 用户管理 API(CRUD)
- [ ] Agent 管理 API
- [ ] 系统监控 API
- [ ] 审计日志 API
**预计工作量**: 3-4 天
### 9.4 第四阶段:API Key 管理(1-2天)
**任务清单**:
- [ ] 增强 API Key 功能
- [ ] API Key 生成和验证
- [ ] API Key 权限管理
- [ ] API Key 速率限制
- [ ] API Key IP 白名单
- [ ] 创建 API Key 管理 API
- [ ] 创建 API Key
- [ ] 查看 API Key 列表
- [ ] 更新 API Key
- [ ] 删除 API Key
- [ ] 撤销 API Key
**预计工作量**: 1-2 天
### 9.5 第五阶段:测试和优化(1-2天)
**任务清单**:
- [ ] 单元测试
- [ ] 认证功能测试
- [ ] 权限功能测试
- [ ] 后台管理 API 测试
- [ ] 集成测试
- [ ] 端到端测试
- [ ] 安全测试
- [ ] 性能优化
- [ ] 查询优化
- [ ] 缓存优化
- [ ] 文档完善
- [ ] API 文档
- [ ] 使用示例
**预计工作量**: 1-2 天
### 9.6 总工作量估算
| 阶段 | 工作量 | 优先级 |
|------|--------|--------|
| 第一阶段:基础认证 | 1-2 天 | P0 |
| 第二阶段:权限管理 | 2-3 天 | P0 |
| 第三阶段:后台管理 API | 3-4 天 | P0 |
| 第四阶段:API Key 管理 | 1-2 天 | P1 |
| 第五阶段:测试和优化 | 1-2 天 | P0 |
| **总计** | **8-13 天** | - |
---
## 10. 技术选型
### 10.1 认证技术
- **JWT**: python-jose[cryptography]
- **密码加密**: passlib[bcrypt]
- **Token 存储**: Redis(用于刷新 Token 和黑名单)
### 10.2 权限管理
- **RBAC**: 自定义实现
- **权限检查**: FastAPI 依赖注入
### 10.3 数据库
- **ORM**: SQLAlchemy 2.0
- **数据库**: PostgreSQL
- **迁移工具**: Alembic
### 10.4 缓存
- **Redis**: Token 缓存、会话管理、限流
---
## 11. 后续扩展
### 11.1 OAuth 2.0 支持
- Google OAuth
- GitHub OAuth
- 企业 SSO
### 11.2 多因素认证 (MFA)
- TOTP (Time-based One-Time Password)
- 短信验证码
- 邮箱验证码
### 11.3 细粒度权限
- 资源级别的权限控制
- 动态权限分配
- 权限继承和覆盖
### 11.4 后台管理界面
- React/Vue 前端
- 实时监控面板
- 数据可视化
---
## 12. 风险评估
### 12.1 安全风险
- **Token 泄露**: 使用 HTTPS、Token 过期时间
- **密码泄露**: bcrypt 加密、密码复杂度要求
- **权限绕过**: 严格的权限检查、审计日志
### 12.2 性能风险
- **Token 验证性能**: Redis 缓存、JWT 验证优化
- **权限检查性能**: 权限缓存、批量检查
### 12.3 兼容性风险
- **现有 API 兼容**: 逐步迁移、版本控制
- **数据库迁移**: Alembic 迁移脚本
---
**文档版本**: v1.0
**最后更新**: 2025年12月22日
**下一步**: 开始实施第一阶段(基础认证)