fix: restore authenticated server-rendered data
Security Quality Gate / npm audit, Bandit, pip-audit, detect-secrets (pull_request) Successful in 10m53s

This commit is contained in:
2026-07-13 13:47:49 +08:00
parent 5f89c11226
commit 6abca4eb75
7 changed files with 151 additions and 28 deletions
@@ -4,8 +4,8 @@
## 结论
- **内部 UAT / 受控单租户试点:有条件可进入。** 当前版本需先部署到 `192.168.3.90` smoke,并通过本文列出的安全、身份和真实 AI 抽样门槛。
- **公开多企业 SaaS 生产:当前 No-Go。** 阻断项不是模板或 Prompt 数量,而是真实邮件交付、真实 AI Provider 评估、内容法务签批和本轮身份安全改动尚未完成远端验证。
- **内部 UAT / 受控单租户试点:可以进入。** 当前候选版本已部署到 `192.168.3.90` smoke,并通过远端身份边界、核心页面、资产计数、schema-check 和 Docker smoke 验证。
- **公开多企业 SaaS 生产:当前 No-Go。** 阻断项不是模板或 Prompt 数量,而是真实邮件交付、真实 AI Provider 评估、内容法务签批和生产运行保障。
- 不建议继续横向增加模板数量。下一阶段应优先完成内容治理、真实模型质量评估和生产运行保障。
## 当前能力
@@ -22,7 +22,7 @@
资产精确核对证据:
- `project-docs/qa-artifacts/v2-asset-count/v2-asset-count-2026-07-13T02-53-18.128434+00-00.json`
- `project-docs/qa-artifacts/v2-asset-count/v2-asset-count-2026-07-13T05-33-30.778054+00-00.json`
- 模板:`30 / 30 / 30`
- 标准条款:`8 / 8 / 8`
- 审查规则:`8 / 8 / 8`
@@ -30,7 +30,7 @@
## 本轮安全硬化
本轮本地代码已完成:
本轮代码和远端 smoke 已完成:
1. Web 会话从可篡改的 Base64 JSON 改为带有效期的 HMAC 签名 cookie,并启用 `HttpOnly`、`SameSite=Lax` 和生产 `Secure`。
2. Contract API 不再在生产环境无条件信任 `X-Tenant-Id` / `X-User-Id`,由受控 Web 代理密钥建立信任边界。
@@ -39,16 +39,29 @@
5. Contract API、审查 worker 和 Python SDK 支持向 AI Platform 传递服务密钥。
6. 生产响应不再返回邀请原始 token 和邮箱开发验证码。
这些变更在本地测试和生产构建通过,但在部署到 smoke 前仍属于“本地已修、远端待验”。
这些变更已通过本地测试、生产构建和远端 smoke 验证。
## 远端验证证据
- Docker smoke:`project-docs/qa-artifacts/v2-smoke-docker-deploy/2026-07-13T13-18-14/v2-smoke-docker-deploy-summary.md`,8 个长期服务健康,迁移、Prompt 导入、黄金样本和审查 worker smoke 通过。
- 鉴权边界:Contract API 与 AI Platform 数据接口缺失或使用错误服务密钥时返回 `401`,使用当前 smoke 服务密钥时返回 `200`;健康端点保持可用。
- Schema:Contract API `status=ok`,Alembic `20260710_0030`;AI Platform Alembic `20260703_0021`,仅 `provider_runtime=warning`,原因是 smoke 明确关闭真实 Provider 并启用 fallback。
- Web 登录:`admin@example.com` 可进入默认租户;合同台账显示 `12,129` 条,模板库和模板起草入口均显示 30 个模板,文件仓库、AI Trace、用户租户页均正常加载。
- SSR 认证回归:修复了认证硬化后 Server Component 裸请求 Contract API 导致合同和模板页面错误显示为 0 的问题;服务端缓存键已纳入租户、用户和角色,浏览器端继续只访问同源代理。
- Word 交付:抽样合同下载返回 `HT-20260713-70C052.docx`,MIME 为 Office Open XML,解码后 37,502 字节且 DOCX 文件头有效。
- 资产精确核对:模板 `30 / 30 / 30`、条款 `8 / 8 / 8`、规则 `8 / 8 / 8`、Prompt `46 / 46 / 46`,法律条文运行时 `789,867` 条。
- 法律问答工程链路可用,但 smoke fallback 抽样的引用相关性不足,不能作为生产 AI 质量证据;必须在真实 Provider、fallback 关闭后重新验收。
- PR 旧提交 `5f89c112` 的 CI 失败来自 Linux detect-secrets 对 SDK 测试固定假值的单个平台差异误报;已使用标准 inline allowlist 标记,安全规则本身未放宽,待当前提交触发 CI 重跑。
## 生产阻断项
### P0-1 远端发布候选验证
### P0-1 远端发布候选验证(已完成)
- 部署当前代码到 `192.168.3.90` smoke。
- 验证无代理密钥直连 Contract API / AI Platform 数据接口返回 `401`。
- 验证 Web 登录后合同、模板、文件、AI Trace、知识库均正常。
- 复跑两套 schema-check、资产精确核对、Docker smoke、核心接口压测和安全扫描。
- [x] 部署当前代码到 `192.168.3.90` smoke。
- [x] 验证无代理密钥直连 Contract API / AI Platform 数据接口返回 `401`。
- [x] 验证 Web 登录后合同、模板、文件、AI Trace、知识库均正常。
- [x] 复跑两套 schema-check、资产精确核对和 Docker smoke。
- [ ] 当前提交 CI 全绿后,复跑带最新候选代码的接口压测与安全质量门,作为生产审批证据。
### P0-2 真实 AI Provider 与质量验收