design: Provider API Key 明文存储与回显变更 #30

Closed
opened 2026-08-22 09:38:14 +08:00 by ila · 1 comment
Owner

基本信息

  • 类型:设计变更
  • 所属 Epic:#3
  • 所属 MVP / 版本:#19 / MVP-1
  • 阶段:已完成

原始需求

  • 来源:用户对话
  • 提出时间:2026-08-22
  • 脱敏摘要:用户要求取消 Provider API Key 加密,保存后允许管理员在页面再次查看;在获知数据库和接口泄露风险后,明确接受风险并确认调整方案。

依赖与影响

  • 前置工单:#17(原管理端原型,已完成)
  • 影响工单:#24(管理端生产实现,当前待实施)
  • 原型变化:原 #17 v1 的“API Key 只写不可回显”约束失效,必须形成新版本并重新验收。

目标与范围

  • 明确 Provider API Key 明文存储和按单个 Provider 主动查看的产品规则。
  • 制作可浏览管理端原型,覆盖查看、隐藏、加载、无权限、失败和空凭据状态。
  • 列表页不得批量返回或展示全部 API Key;查看动作只针对单个 Provider。
  • 更新项目安全红线,使后续生产工单可以在已确认风险范围内实施。
  • 更新 #24 的设计依据和验收标准;原型未确认前不修改生产存储、接口或前端。

非目标

  • 本工单不修改数据库、生产 API 或管理端生产代码。
  • 不写入真实 API Key、用户数据或生产数据。
  • 不扩大到终端用户、公开 API、计费、支付、配额或其他 MVP-2 范围。

已确认方案

  • Provider API Key 后续改为明文落库,并取消 CHORUS_MASTER_KEY 启动依赖。
  • API Key 不进入列表响应;管理页面通过单个 Provider 的显式查看动作取得完整值,并允许再次隐藏。
  • 查看接口仍受管理员 JWT 和 Casbin 权限控制,响应禁止缓存;日志、审计、错误、工单、Wiki、原型和截图仍不得记录真实密钥。
  • 若数据库已有加密凭据,迁移必须停止并执行受控转换,不得猜测、覆盖或丢弃。

设计证据

  • 原设计:prototypes/17/v1/index.html,已确认,但密钥部分被本工单取代。
  • 新快照:待生成 prototypes/30/v1/index.html。
  • 状态:已确认。

文档影响

  • 无长期文档影响
  • 更新 Product-Requirements-Overview、Architecture-and-Code-Map、Business-Rules-and-Glossary、Project-Profile 中的凭据规则。
  • 修改仓库 AGENTS.md 中对应项目安全红线。

验收标准

  • 本地 HTML 快照可直接打开,资源使用相对路径且不含真实凭据。
  • Provider 页面能演示显式查看、隐藏、加载、无权限、请求失败和无凭据状态。
  • 列表页不展示或批量加载完整 API Key。
  • 页面明确区分“查看现有密钥”和“保存新密钥”,键盘与可访问名称完整。
  • 用户确认新原型后,才允许更新并执行 #24 的生产范围。

风险与回退

  • 风险:数据库、备份、接口响应、浏览器内存和管理员会话泄露时,Provider API Key 可被直接取得。
  • 回退:未确认原型直接废弃;确认版本不得原位覆盖。生产实施后的回退需要重新引入加密和受控数据转换,不允许静默丢失凭据。

实施与验证证据

  • 实现提交:6bba98f,已推送 origin/main。
  • 原型入口:prototypes/30/v1/index.html;相对资源完整,不含真实凭据或常见真实密钥格式。
  • 交互覆盖:单条 Provider 显式查看/隐藏、保存新值、加载、错误、无权限、无凭据;列表仅显示配置状态。
  • 项目规则:AGENTS.md 已改为允许明文落库和单条显式读取,同时保留列表不批量返回、响应不缓存及日志/审计/文档不泄露边界。
  • Wiki:Project-Profile 8578dcf0c29f7792135f01d902b8417f0374db05;Architecture-and-Code-Map 5793b6a0b6a077afc8ef2f715f61c4f4189d9267;Business-Rules-and-Glossary 2d688855b88d9165c79639549e8812ac87a5ec92;Product-Requirements-Overview 957788e4c3d27a5b8bff8d1faeaf4c58e288a6a0。核心镜像同步并检查一致。
  • 验证:内联 JavaScript 语法通过;相对资源、viewport、查看控件、敏感模式扫描和 git diff --check 通过;python dev_scripts/harness.py check --strict 通过;Harness 42 项测试通过。
  • 未验证:当前会话没有可连接浏览器,未执行自动截图和点击回放;需用户打开本地快照审核。
  • 本机配置:admin/config/settings.yml 保持未跟踪,未加入提交;后续运行按用户要求使用该文件。

验收关闭证据

  • 用户于 2026-08-22 明确回复“#30 验收通过”。
  • 验收文档提交:8935917,已推送 origin/main。
  • 任务归档 revision:f1a73b1c2a70df18dfe1c15aa46cc1e3ae7fe492。
  • Product-Requirements-Overview revision:94147da37dc446ad67ba89079e88f8cad31ad5bf。
  • 核心 Wiki 镜像检查通过;任务归档未导出到 docs/task/。
## 基本信息 - 类型:设计变更 - 所属 Epic:#3 - 所属 MVP / 版本:#19 / MVP-1 - 阶段:已完成 ## 原始需求 - 来源:用户对话 - 提出时间:2026-08-22 - 脱敏摘要:用户要求取消 Provider API Key 加密,保存后允许管理员在页面再次查看;在获知数据库和接口泄露风险后,明确接受风险并确认调整方案。 ## 依赖与影响 - 前置工单:#17(原管理端原型,已完成) - 影响工单:#24(管理端生产实现,当前待实施) - 原型变化:原 #17 v1 的“API Key 只写不可回显”约束失效,必须形成新版本并重新验收。 ## 目标与范围 - 明确 Provider API Key 明文存储和按单个 Provider 主动查看的产品规则。 - 制作可浏览管理端原型,覆盖查看、隐藏、加载、无权限、失败和空凭据状态。 - 列表页不得批量返回或展示全部 API Key;查看动作只针对单个 Provider。 - 更新项目安全红线,使后续生产工单可以在已确认风险范围内实施。 - 更新 #24 的设计依据和验收标准;原型未确认前不修改生产存储、接口或前端。 ## 非目标 - 本工单不修改数据库、生产 API 或管理端生产代码。 - 不写入真实 API Key、用户数据或生产数据。 - 不扩大到终端用户、公开 API、计费、支付、配额或其他 MVP-2 范围。 ## 已确认方案 - Provider API Key 后续改为明文落库,并取消 `CHORUS_MASTER_KEY` 启动依赖。 - API Key 不进入列表响应;管理页面通过单个 Provider 的显式查看动作取得完整值,并允许再次隐藏。 - 查看接口仍受管理员 JWT 和 Casbin 权限控制,响应禁止缓存;日志、审计、错误、工单、Wiki、原型和截图仍不得记录真实密钥。 - 若数据库已有加密凭据,迁移必须停止并执行受控转换,不得猜测、覆盖或丢弃。 ## 设计证据 - 原设计:`prototypes/17/v1/index.html`,已确认,但密钥部分被本工单取代。 - 新快照:待生成 `prototypes/30/v1/index.html`。 - 状态:已确认。 ## 文档影响 - [ ] 无长期文档影响 - [x] 更新 Product-Requirements-Overview、Architecture-and-Code-Map、Business-Rules-and-Glossary、Project-Profile 中的凭据规则。 - [x] 修改仓库 AGENTS.md 中对应项目安全红线。 ## 验收标准 - [x] 本地 HTML 快照可直接打开,资源使用相对路径且不含真实凭据。 - [x] Provider 页面能演示显式查看、隐藏、加载、无权限、请求失败和无凭据状态。 - [x] 列表页不展示或批量加载完整 API Key。 - [x] 页面明确区分“查看现有密钥”和“保存新密钥”,键盘与可访问名称完整。 - [x] 用户确认新原型后,才允许更新并执行 #24 的生产范围。 ## 风险与回退 - 风险:数据库、备份、接口响应、浏览器内存和管理员会话泄露时,Provider API Key 可被直接取得。 - 回退:未确认原型直接废弃;确认版本不得原位覆盖。生产实施后的回退需要重新引入加密和受控数据转换,不允许静默丢失凭据。 ## 实施与验证证据 - 实现提交:`6bba98f`,已推送 `origin/main`。 - 原型入口:`prototypes/30/v1/index.html`;相对资源完整,不含真实凭据或常见真实密钥格式。 - 交互覆盖:单条 Provider 显式查看/隐藏、保存新值、加载、错误、无权限、无凭据;列表仅显示配置状态。 - 项目规则:`AGENTS.md` 已改为允许明文落库和单条显式读取,同时保留列表不批量返回、响应不缓存及日志/审计/文档不泄露边界。 - Wiki:Project-Profile `8578dcf0c29f7792135f01d902b8417f0374db05`;Architecture-and-Code-Map `5793b6a0b6a077afc8ef2f715f61c4f4189d9267`;Business-Rules-and-Glossary `2d688855b88d9165c79639549e8812ac87a5ec92`;Product-Requirements-Overview `957788e4c3d27a5b8bff8d1faeaf4c58e288a6a0`。核心镜像同步并检查一致。 - 验证:内联 JavaScript 语法通过;相对资源、viewport、查看控件、敏感模式扫描和 `git diff --check` 通过;`python dev_scripts/harness.py check --strict` 通过;Harness 42 项测试通过。 - 未验证:当前会话没有可连接浏览器,未执行自动截图和点击回放;需用户打开本地快照审核。 - 本机配置:`admin/config/settings.yml` 保持未跟踪,未加入提交;后续运行按用户要求使用该文件。 ## 验收关闭证据 - 用户于 2026-08-22 明确回复“#30 验收通过”。 - 验收文档提交:`8935917`,已推送 `origin/main`。 - 任务归档 revision:`f1a73b1c2a70df18dfe1c15aa46cc1e3ae7fe492`。 - Product-Requirements-Overview revision:`94147da37dc446ad67ba89079e88f8cad31ad5bf`。 - 核心 Wiki 镜像检查通过;任务归档未导出到 `docs/task/`。
Author
Owner

归档已补全并在线回读:

  • Wiki:Task-30-Provider-API-Key-明文存储与回显变更
  • revision:47b1d7175c5a851c8efcf02663d1413787b30966
  • 核心 Wiki 镜像 sync --check 通过
  • 任务归档未导出到 docs/task/

当前状态保持待验收。

归档已补全并在线回读: - Wiki:Task-30-Provider-API-Key-明文存储与回显变更 - revision:`47b1d7175c5a851c8efcf02663d1413787b30966` - 核心 Wiki 镜像 sync --check 通过 - 任务归档未导出到 `docs/task/` 当前状态保持待验收。
ila closed this issue 2026-08-22 09:56:59 +08:00
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/chorus#30