Files

281 lines
19 KiB
Markdown
Raw Permalink Normal View History

# Sub2API 模块分析汇总报告
## 一、项目概述
Sub2API是一个AI API网关平台用于分发和管理AI产品订阅的API配额。用户通过平台生成的API Key访问上游AI服务Claude、OpenAI、Gemini等平台负责认证、计费、负载均衡和请求转发。
## 二、模块架构总览
```
┌─────────────────────────────────────────────────────────────────┐
│ 前端 (Vue 3 + TypeScript) │
├─────────────────────────────────────────────────────────────────┤
│ API Gateway 核心模块 │
│ ┌─────────┐ ┌─────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 路由分发 │ │ 账号选择 │ │ 请求转发 │ │ 故障转移 │ │
│ └─────────┘ └─────────┘ └──────────┘ └──────────┘ │
├─────────────────────────────────────────────────────────────────┤
│ 认证与授权模块 │
│ ┌─────────┐ ┌─────────┐ ┌──────────┐ ┌──────────┐ │
│ │ JWT认证 │ │API Key │ │OAuth登录 │ │ TOTP │ │
│ └─────────┘ └─────────┘ └──────────┘ └──────────┘ │
├─────────────────────────────────────────────────────────────────┤
│ 用户与API Key管理模块 │
│ ┌─────────┐ ┌─────────┐ ┌──────────┐ │
│ │ 用户管理 │ │ API Key │ │ 分组管理 │ │
│ └─────────┘ └─────────┘ └──────────┘ │
├─────────────────────────────────────────────────────────────────┤
│ 账户管理模块 │
│ ┌─────────┐ ┌─────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 账号CRUD│ │ 账号测试│ │ 状态管理 │ │ 分组管理 │ │
│ └─────────┘ └─────────┘ └──────────┘ └──────────┘ │
├─────────────────────────────────────────────────────────────────┤
│ 计费与配额模块 │
│ ┌─────────┐ ┌─────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 用量记录│ │ 计费计算│ │ 速率限制 │ │ 余额管理 │ │
│ └─────────┘ └─────────┘ └──────────┘ └──────────┘ │
├─────────────────────────────────────────────────────────────────┤
│ 调度与负载均衡模块 │
│ ┌─────────┐ ┌─────────┐ ┌──────────┐ │
│ │ 负载感知│ │ 故障转移│ │ 粘性会话 │ │
│ └─────────┘ └─────────┘ └──────────┘ │
├─────────────────────────────────────────────────────────────────┤
│ 用量统计与日志模块 │
│ ┌─────────┐ ┌─────────┐ ┌──────────┐ │
│ │ 用量记录│ │ 数据分析│ │ 数据导出 │ │
│ └─────────┘ └─────────┘ └──────────┘ │
├─────────────────────────────────────────────────────────────────┤
│ 订阅与兑换码模块 │
│ ┌─────────┐ ┌─────────┐ │
│ │ 订阅管理│ │ 兑换码 │ │
│ └─────────┘ └─────────┘ │
├─────────────────────────────────────────────────────────────────┤
│ 运营与监控模块 │
│ ┌─────────┐ ┌─────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 系统监控│ │ 告警管理│ │ 运维日志 │ │ 备份恢复 │ │
│ └─────────┘ └─────────┘ └──────────┘ └──────────┘ │
├─────────────────────────────────────────────────────────────────┤
│ Sora与媒体模块 │
│ ┌─────────┐ ┌─────────┐ │
│ │ 视频生成│ │ 媒体存储│ │
│ └─────────┘ └─────────┘ │
└─────────────────────────────────────────────────────────────────┘
```
## 三、模块依赖关系
### 3.1 详细依赖图
```
┌─────────────────────────────────────────────────────────────────────────────┐
│ 请求入口 │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ /v1/messages│ │/v1/chat/ │ │ /v1beta/ │ │ /sora/ │ │
│ │ (Claude) │ │completions │ │ generateContent│ │ v1/creative│ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
└──────────┼────────────────┼────────────────┼────────────────┼───────────────┘
│ │ │ │
▼ ▼ ▼ ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ 认证中间件层 │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ api_key_auth.go │ │
│ │ APIKeyService ──► BillingCacheService ──► SubscriptionService │ │
│ │ (Key验证) (余额检查) (订阅验证) │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│ 网关核心层 (gateway_service.go) │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ GatewayService │ │
│ │ │ │
│ │ SelectAccountWithLoadAwareness() ──► ConcurrencyService │ │
│ │ (负载感知选择) (并发槽位控制) │ │
│ │ │ │ │
│ │ ▼ │ │
│ │ RecordUsage() ──► BillingService ──► BillingCacheService │ │
│ │ (用量记录) (计费) (缓存) │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│ 下游服务层 │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │BillingService│ │Concurrency │ │Identity │ │RateLimit │ │
│ │ │ │Service │ │Service │ │Service │ │
│ └──────┬───────┘ └──────┬───────┘ └──────────────┘ └──────┬───────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │UserRepo │ │AccountRepo │ │Redis Cache │ │HTTPUpstream │ │
│ │(余额/费率) │ │(账号选择) │ │(实时数据) │ │(上游调用) │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘ │
└─────────────────────────────────────────────────────────────────────────────┘
```
### 3.2 模块依赖矩阵
| 模块 | 被依赖 | 依赖 | 共享数据 |
|------|--------|------|----------|
| **认证模块** | Gateway | UserRepo | User, APIKey |
| **账户模块** | Gateway, Billing | AccountRepo, GroupRepo | Account, Group |
| **计费模块** | Gateway | BillingService, UserRepo | Balance, Usage |
| **用户模块** | Auth, Gateway | UserRepo, APIKeyRepo | User, APIKey |
| **订阅模块** | APIKey Auth | SubscriptionRepo | Subscription |
| **网关模块** | Handler | 所有服务 | Request Context |
### 3.3 高风险修改影响
| 修改内容 | 影响模块 | 风险 |
|---------|---------|------|
| `APIKeyService.ValidateKey()` | 所有 API | 🔴 认证失效 |
| `BillingService.CalculateCost()` | 所有请求 | 🔴 计费错误 |
| `SelectAccountWithLoadAwareness()` | 所有请求 | 🔴 负载不均 |
| `BillingCacheService.CheckBalance()` | Gateway | 🟡 误拒绝请求 |
| `ConcurrencyService` | Gateway | 🟡 并发失控 |
## 四、核心数据流
### 4.1 请求处理流程
1. **请求入口**用户通过API Key发起请求
2. **认证验证**验证API Key有效性、权限、配额
3. **账号选择**:根据负载和策略选择上游账号
4. **请求转发**将请求转发到上游AI服务
5. **响应处理**:接收响应,记录用量,计算费用
6. **结果返回**:将响应返回给用户
### 4.2 数据持久化
- **PostgreSQL**用户、账号、API Key、订阅、用量日志
- **Redis**:缓存、实时统计、会话、限流计数
## 五、安全架构
### 5.1 认证层
- JWT Token用户会话认证
- API Key程序化访问认证
- OAuth第三方登录Anthropic、Google、OpenAI、Linux.do
- TOTP双因素认证
### 5.2 授权层
- 分组隔离:用户/账号分组
- 权限控制:角色(用户/管理员/超级管理员)
- IP白名单API Key级别IP限制
### 5.3 审计层
- 登录日志
- 操作日志
- 用量日志
## 六、配置管理
### 6.1 主要配置项
| 配置类别 | 配置项 |
|----------|--------|
| 服务 | 端口、模式、信任代理 |
| 数据库 | PostgreSQL连接 |
| 缓存 | Redis连接 |
| 安全 | JWT密钥、TOTP密钥、CORS、URL白名单 |
| 网关 | 重试策略、超时、粘性会话 |
| 计费 | 模型定价、缓存策略 |
| 限流 | 用户/API Key/IP限流规则 |
## 七、修改与扩展指南
### 7.1 常见修改场景
1. **添加新上游支持**
- 添加账号类型常量
- 实现请求转换器
- 注册路由
2. **调整计费规则**
- 修改定价配置
- 调整限流参数
3. **自定义工作流**
- 添加中间件
- 实现Hook
### 7.2 注意事项
1. 线程安全:注意并发访问
2. 事务一致性:关键操作使用事务
3. 配置验证:修改配置需要测试
## 八、安全审计发现
### 8.1 已验证的安全措施
- JWT使用HS256/384/512无none算法漏洞
- 密码bcrypt哈希存储
- Ent ORM防止SQL注入
- 多级限流防护
- URL白名单保护
### 8.2 需要注意的问题
1. **跨实例使用风险**激活码和API Key未包含系统标识
- 建议在Key生成时嵌入实例ID
2. **配置安全**:生产环境需启用所有安全选项
- URL白名单
- HTTPS强制
- 强JWT密钥
## 九、模块文档索引
| 模块 | 文档 |
|------|------|
| API Gateway | `MODULE_01_API_GATEWAY.md` |
| 认证与授权 | `MODULE_02_AUTH.md` |
| 账户管理 | `MODULE_03_ACCOUNT.md` |
| 用户与API Key | `MODULE_04_USER_APIKEY.md` |
| 计费与配额 | `MODULE_05_BILLING.md` |
| 调度与负载均衡 | `MODULE_06_SCHEDULING.md` |
| 用量统计 | `MODULE_07_USAGE.md` |
| 订阅与兑换码 | `MODULE_08_SUBSCRIPTION.md` |
| 运营与监控 | `MODULE_09_OPS.md` |
| Sora与媒体 | `MODULE_10_SORA.md` |
| 前端架构 | `MODULE_11_FRONTEND.md` |
## 十、部署与问题排查
| 文档 | 说明 |
|------|------|
| `WINDOWS_DEPLOYMENT_TROUBLESHOOTING.md` | Windows 本地部署问题排查指南 |
| `MODIFICATION_GUIDE.md` | 代码修改准备指南 |
| `SECURITY_ISSUE_CROSS_INSTANCE.md` | 跨实例安全漏洞分析 |
| `ADMIN_TEST_REPORT.md` | 管理后台测试报告Playwright E2E |
| `FULL_TEST_REPORT.md` | 全面测试报告Go + Vitest + Playwright |
| `tests/` | 独立测试体系目录E2E + 集成测试 + 工具脚本) |
## 十一、审查与更新记录
| 日期 | 版本 | 更新内容 |
|------|------|----------|
| 2025-01 | 1.0 | 初始版本 |
| 2026-03-23 | 1.1 | 审查修正MODULE_01/05/06 文件路径、算法描述、配额检查流程 |
| 2026-03-24 | 1.2 | 添加 Windows 部署问题排查文档 |
| 2026-03-24 | 1.3 | 添加管理后台测试报告23/23 Playwright E2E 测试通过) |
| 2026-03-24 | 1.4 | 添加全面测试报告Go 200+测试 / Vitest 301测试 / 通过率 98.5% |
| 2026-03-24 | 1.5 | 修复前端测试失败用例,建立独立测试体系目录 |
> 📋 **审查报告**`REVIEW_AND_DEPENDENCIES.md` - 包含详细的模块交叉依赖分析和修改影响评估
> 📋 **测试报告**
> - `ADMIN_TEST_REPORT.md` - Playwright E2E 自动化测试结果
> - `FULL_TEST_REPORT.md` - 全栈测试结果汇总
> 📋 **测试体系**`tests/` - 完整的测试框架和工具脚本
---
*文档版本1.4*
*最后更新2026-03-24*
*分析基于Sub2API v0.1.104*继续