目标
修复当前后端中阻碍 iOS 真实接口对接的安全与功能缺陷。在 H0 完成之前,不允许启动真实 iOS 接口联调。
背景
经 iOS 端对接可行性审计发现,当前 api-server 存在以下阻断性问题:
- Apple 登录 mock fallback:生产环境 APPLE_BUNDLE_ID 缺失时退回 mock,任意长度 ≥4 的字符串即可登录
/internal/*无认证暴露:7 个内部端点可直接访问文档原文、写入 chunks/candidates、劫持导入作业- 用户禁用后 JWT 仍有效:JwtAuthGuard 不检查用户状态
- Refresh Token 刷新不检查用户状态:禁用/删除用户仍可刷新 token
- 用户 JWT 与 Admin JWT 密钥混用:未彻底隔离
- iOS 核心接口 @Body() any:import/source/learning-session 缺少 DTO 校验
- CI/CD 硬编码生产数据库密码
Issue 清单
- H0-01 修复 Apple 登录 mock fallback
- H0-02 为 /internal/* 增加 InternalAuthGuard
- H0-03 JwtAuthGuard 增加用户状态检查
- H0-04 Refresh Token 刷新时检查用户状态
- H0-05 用户 JWT 和 Admin JWT 密钥彻底隔离
- H0-06 补齐 iOS 核心流程 DTO(import / source / learning-session)
- H0-07 修复后跑核心 CAPI E2E + 输出 iOS 对接文档
验收标准
- Apple 登录真实验证 identityToken,不再接受 mock
- /internal/* 全部受 InternalAuthGuard 保护
- 禁用/删除用户不能访问 /api/* 和刷新 token
- user token 与 admin token 完全隔离
- import/source/learning-session 有完整 DTO + ValidationPipe
- 核心 CAPI E2E 全部通过
- 输出 iOS 对接文档
禁止事项
- 禁止在 H0 未完成前启动真实 iOS 接口联调
- 禁止绕过安全修复直接给 iOS 端发接口
- CI/CD 密码必须迁移到 Secret 并轮换
Legacy 流量清零、观察期和退役。非业务迁移里程碑。
前置条件
- Unified 生产流量达到 100%
- 连续观察期内无 P0/P1
- 所有 Flag 可回滚
- Legacy 流量为 0
- Legacy Queue 无新任务
范围
- AiAnalysisWorker 退役
- ReviewCardSubscriber 退役
- 旧 ai-analysis Queue 删除
- 旧 Runtime 轮询链路退役
- Legacy 代码清理
主 API 接入 Rust Heavy Runtime,完成 AI 分析任务调度、Snapshot、模型 key 管理、Runtime 结果落库、用户侧查询、admin 诊断接口。本批不迁移 RAG。
M3:测验/自测模块
50%
测验题库生成/答题/评分/错题本