haruka
0f8e2d0934
fix(security): 屏蔽 admin 账号接口返回的敏感凭证字段
Account.Credentials 是 JSONB map,混合存放可编辑的非敏感配置(base_url、
model_mapping、project_id 等)与敏感秘钥(OAuth access/refresh/id token、
API key、AWS secret、Vertex private key 等)。当前所有 admin 账号接口直接
透传该 map,token 经由浏览器 DevTools、抓包、日志等途径泄漏。
- service 包新增 SensitiveCredentialKeys 清单与 MergePreservingSensitiveCreds
作为单一权威定义。
- dto 层 RedactCredentials 在响应里剥离敏感子键,输出 credentials_status
(has_<key> 布尔标识)告知前端存在性,不暴露原值。
- AccountFromServiceShallow 接入脱敏,覆盖 list、get、create、update、
refresh、batch、bulk-update、OAuth 创建等 9 个 handler。
- service.UpdateAccount 改为合并语义:incoming 没传敏感键则保留 existing,
让前端"全对象 PUT"流程在脱敏后无感工作;显式提供新 token 仍会覆盖。
- 前端 EditAccountModal 修复脱敏后会崩的两处兜底:apikey 必填检查和
Vertex SA JSON 存在性校验改读 credentials_status.has_*。
- 导出端点 /admin/accounts/data 走独立的 DataAccount 结构,按设计保留
完整 credentials 作为管理员备份路径。
测试:RedactCredentials 单元测试、mapper 端到端 JSON 断言(确认序列化
后无 token 子串)、UpdateAccount 合并语义三种场景(保留 / 覆盖 / 空 map 跳过)。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 03:44:04 +08:00
..
2026-04-23 21:40:58 +08:00
2026-05-08 03:44:04 +08:00
2026-01-12 11:44:34 +08:00
2026-01-05 13:54:43 +08:00
2026-01-05 10:06:31 +08:00
2026-01-06 11:36:38 +08:00
2025-12-26 00:10:44 -08:00
2026-05-05 17:13:25 +08:00
2026-05-05 17:13:25 +08:00
2025-12-26 00:10:44 -08:00
2026-01-16 19:49:33 +08:00
2026-02-02 22:13:50 +08:00
2025-12-18 13:50:39 +08:00
2026-05-05 03:26:54 +08:00
2026-04-23 21:40:58 +08:00