feat: 实现 API 安全审计与管理端 API #45

Closed
opened 2026-08-24 12:01:53 +08:00 by ila · 2 comments
Owner

基本信息

  • 类型:需求
  • 所属 Epic:#3
  • 所属 MVP / 版本:#35 / MVP-2
  • 阶段:已完成

原始需求

  • 来源:用户对话与已验收 #36/#37
  • 提出时间:2026-08-24
  • 脱敏摘要:面向现有受控用户交付安全的 API Key、OpenAPI 生成接口、限流、审计和必要管理页面;不开放注册、不自动删除数据、不增加计费或每日配额。

设计与原型门禁

  • 修改类型:生产实现
  • 已确认技术设计:Wiki Architecture-and-Code-Map,原确认 revision 1e8fea6c058d6d23f4a40183dd51708c8a4dae84
  • 已确认原型:prototypes/37/v1/index.html,#37 revision b65c47e5f701f67a8a06972e4f3e02c1f7bbd554
  • 状态:已确认(用户,2026-08-24)

依赖与并行

  • 前置工单:#42、#43、#44,均已完成。
  • 是否允许并行:否;审计覆盖已稳定的用户和程序链路。

要解决什么

实现脱敏 api_audit_events 写入与管理员 API Key 元数据检索、详情和幂等撤销 API。

做什么 / 不做什么

  • 做:Key 创建/改名/撤销、管理员撤销、程序提交/拒绝、认证后限流拒绝审计;管理员 JWT/Casbin API;管理撤销双审计;last_used_at 节流更新。
  • 不做:记录完整 Key、Prompt、文件、Authorization、Cookie、响应正文或原始 IP;管理员不能创建或读取完整 Key;管理 UI 属于 #46。

实施结果

  • 新增严格类型的共享 API 审计仓储,动作、结果和摘要均为白名单。
  • 用户 Key 生命周期审计与业务变更处于同一事务。
  • 已认证 OpenAPI 提交、拒绝及限流拒绝写审计;未知 Key 在认证阶段拒绝且不写数据库。
  • 管理端提供元数据列表、详情及幂等撤销 API,禁止缓存且不返回完整 Key、public_id 或 secret_hash。
  • 管理撤销同步写入管理员审计和 API 安全审计,首次撤销时间保持不变。
  • last_used_at 使用一分钟节流窗口。
  • Chorus 管理审计中的请求 ID 仅接受 UUID,否则使用服务端生成值。

验收标准

  • 审计事件覆盖设计动作且 summary 脱敏。
  • 未知 Key 失败不会制造无限数据库审计行。
  • 管理员只看到元数据,可检索并幂等撤销;权限负向测试通过。
  • 管理撤销同时写 admin 与 API 安全审计,不泄露完整 Key。
  • 用户人工验收(2026-08-25)。

文档影响

  • 更新管理 API、审计字段/边界与故障排查。
  • Architecture-and-Code-Map revision:47afee496f6d4105e51cddb47e9ba9dae7380293
  • Business-Rules-and-Glossary revision:ea843c01b7549150a9aadde703ee07419cfe401d
  • Local-Development-and-Verification revision:01d2c4aaf24e17d8b9f6cc90d59c1f7244941110
  • Troubleshooting revision:343eedb7cb319e2de24725965817444454ef9b8d
  • 任务归档:Task-45-实现-API-安全审计与管理端-API,revision 3b5eacc47dff15d64ca7ebf4786299dc9c1eb7c1

测试证据

  • go test ./...:通过。
  • go vet ./...:通过。
  • go -C admin test ./...:通过。
  • Portal 与 Admin API 的 race 测试:通过。
  • Portal 与 Admin API 的 MySQL 定向集成测试:通过。
  • python dev_scripts/harness.py sync --check 与 check --strict:通过。
  • Supervisor 中用户端与管理 API 已重新构建并完成未认证冒烟检查。
  • 未验证:未调用真实 Provider;管理页面属于 #46。

提交

  • b1f8bcb feat: 实现 API 安全审计与管理端 API (#45)

风险和回退

审计可能成为泄密面或写放大入口;实现通过固定摘要字段、认证后审计与请求 ID 约束限制风险。需要回退时可撤回管理入口,但不删除既有审计记录。

## 基本信息 - 类型:需求 - 所属 Epic:#3 - 所属 MVP / 版本:#35 / MVP-2 - 阶段:已完成 ## 原始需求 - 来源:用户对话与已验收 #36/#37 - 提出时间:2026-08-24 - 脱敏摘要:面向现有受控用户交付安全的 API Key、OpenAPI 生成接口、限流、审计和必要管理页面;不开放注册、不自动删除数据、不增加计费或每日配额。 ## 设计与原型门禁 - 修改类型:生产实现 - 已确认技术设计:Wiki Architecture-and-Code-Map,原确认 revision `1e8fea6c058d6d23f4a40183dd51708c8a4dae84` - 已确认原型:`prototypes/37/v1/index.html`,#37 revision `b65c47e5f701f67a8a06972e4f3e02c1f7bbd554` - 状态:已确认(用户,2026-08-24) ## 依赖与并行 - 前置工单:#42、#43、#44,均已完成。 - 是否允许并行:否;审计覆盖已稳定的用户和程序链路。 ## 要解决什么 实现脱敏 `api_audit_events` 写入与管理员 API Key 元数据检索、详情和幂等撤销 API。 ## 做什么 / 不做什么 - 做:Key 创建/改名/撤销、管理员撤销、程序提交/拒绝、认证后限流拒绝审计;管理员 JWT/Casbin API;管理撤销双审计;`last_used_at` 节流更新。 - 不做:记录完整 Key、Prompt、文件、Authorization、Cookie、响应正文或原始 IP;管理员不能创建或读取完整 Key;管理 UI 属于 #46。 ## 实施结果 - 新增严格类型的共享 API 审计仓储,动作、结果和摘要均为白名单。 - 用户 Key 生命周期审计与业务变更处于同一事务。 - 已认证 OpenAPI 提交、拒绝及限流拒绝写审计;未知 Key 在认证阶段拒绝且不写数据库。 - 管理端提供元数据列表、详情及幂等撤销 API,禁止缓存且不返回完整 Key、public_id 或 secret_hash。 - 管理撤销同步写入管理员审计和 API 安全审计,首次撤销时间保持不变。 - `last_used_at` 使用一分钟节流窗口。 - Chorus 管理审计中的请求 ID 仅接受 UUID,否则使用服务端生成值。 ## 验收标准 - [x] 审计事件覆盖设计动作且 summary 脱敏。 - [x] 未知 Key 失败不会制造无限数据库审计行。 - [x] 管理员只看到元数据,可检索并幂等撤销;权限负向测试通过。 - [x] 管理撤销同时写 admin 与 API 安全审计,不泄露完整 Key。 - [x] 用户人工验收(2026-08-25)。 ## 文档影响 - [x] 更新管理 API、审计字段/边界与故障排查。 - Architecture-and-Code-Map revision:`47afee496f6d4105e51cddb47e9ba9dae7380293` - Business-Rules-and-Glossary revision:`ea843c01b7549150a9aadde703ee07419cfe401d` - Local-Development-and-Verification revision:`01d2c4aaf24e17d8b9f6cc90d59c1f7244941110` - Troubleshooting revision:`343eedb7cb319e2de24725965817444454ef9b8d` - 任务归档:`Task-45-实现-API-安全审计与管理端-API`,revision `3b5eacc47dff15d64ca7ebf4786299dc9c1eb7c1` ## 测试证据 - `go test ./...`:通过。 - `go vet ./...`:通过。 - `go -C admin test ./...`:通过。 - Portal 与 Admin API 的 race 测试:通过。 - Portal 与 Admin API 的 MySQL 定向集成测试:通过。 - `python dev_scripts/harness.py sync --check` 与 `check --strict`:通过。 - Supervisor 中用户端与管理 API 已重新构建并完成未认证冒烟检查。 - 未验证:未调用真实 Provider;管理页面属于 #46。 ## 提交 - `b1f8bcb` feat: 实现 API 安全审计与管理端 API (#45) ## 风险和回退 审计可能成为泄密面或写放大入口;实现通过固定摘要字段、认证后审计与请求 ID 约束限制风险。需要回退时可撤回管理入口,但不删除既有审计记录。
Author
Owner

#45 已完成实现并进入待验收。

  • 提交:b1f8bcb0cfe073f02a2734692f35cdeaf2c2ca08,已推送到 main
  • 自动化:Go 单元、静态、race 与本机 MySQL 定向集成测试均通过
  • 文档:核心 Wiki 已更新并通过 sync --check;任务归档 revision 6ab75e6d40a11da7756063dafb33e147e1ab4bc1
  • 部署:Supervisor 中用户端和管理 API 已使用新构建运行
  • 边界:未调用真实 Provider;管理端页面属于 #46

工单保持打开,等待人工验收。

#45 已完成实现并进入待验收。 - 提交:`b1f8bcb0cfe073f02a2734692f35cdeaf2c2ca08`,已推送到 `main` - 自动化:Go 单元、静态、race 与本机 MySQL 定向集成测试均通过 - 文档:核心 Wiki 已更新并通过 `sync --check`;任务归档 revision `6ab75e6d40a11da7756063dafb33e147e1ab4bc1` - 部署:Supervisor 中用户端和管理 API 已使用新构建运行 - 边界:未调用真实 Provider;管理端页面属于 #46 工单保持打开,等待人工验收。
ila closed this issue 2026-08-25 10:18:20 +08:00
Author
Owner

用户于 2026-08-25 明确验收通过。任务归档已更新为“已完成”(revision 3b5eacc47dff15d64ca7ebf4786299dc9c1eb7c1),核心 Wiki 镜像一致性检查通过;#35 与 #3 的子工单索引已同步。

用户于 2026-08-25 明确验收通过。任务归档已更新为“已完成”(revision `3b5eacc47dff15d64ca7ebf4786299dc9c1eb7c1`),核心 Wiki 镜像一致性检查通过;#35 与 #3 的子工单索引已同步。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/chorus#45