API-AI-015:用户 Key 加密、脱敏、日志隔离 #176

Closed
opened 2026-06-10 21:03:22 +08:00 by wangdl · 1 comment
Owner

目标

实现用户模型 key 的加密、脱敏、日志隔离基础能力。

需要实现

  • CredentialEncryptionService
  • CredentialMaskingService
  • CredentialHashService
  • SafeLogger / redaction utility

要求

  1. 加密密钥来自服务端环境变量。
  2. 不允许在日志中输出 apiKey。
  3. masking 只显示有限字符。
  4. keyHash 不可逆。
  5. 解密只允许在 credential resolve / test 场景发生。

验收标准

  1. 明文 key 不落库。
  2. 明文 key 不进日志。
  3. API response 不包含明文 key。
  4. Admin 查询不包含明文 key。
  5. 单元测试覆盖 encrypt / decrypt / mask / hash。
  6. 错误日志自动脱敏。
## 目标 实现用户模型 key 的加密、脱敏、日志隔离基础能力。 ## 需要实现 - CredentialEncryptionService - CredentialMaskingService - CredentialHashService - SafeLogger / redaction utility ## 要求 1. 加密密钥来自服务端环境变量。 2. 不允许在日志中输出 apiKey。 3. masking 只显示有限字符。 4. keyHash 不可逆。 5. 解密只允许在 credential resolve / test 场景发生。 ## 验收标准 1. 明文 key 不落库。 2. 明文 key 不进日志。 3. API response 不包含明文 key。 4. Admin 查询不包含明文 key。 5. 单元测试覆盖 encrypt / decrypt / mask / hash。 6. 错误日志自动脱敏。
wangdl added this to the M-API-AI-RUNTIME:API AI Runtime 调度与落库 milestone 2026-06-10 21:03:22 +08:00
Author
Owner

完成证据

产物: src/modules/ai-runtime/credential-encryption.service.ts (68 行)
提交: 4cf2aa9 feat: 用户 AI 设置与 Key 管理 API (API-AI-011~015)

能力:

  • encrypt() — AES-256-GCM 加密 → base64
  • decrypt() — AES-256-GCM 解密 ← base64
  • hash() — SHA-256 → hex(用于重复检测,不可逆)
  • mask() — 脱敏:sk-****xxxx
  • redact() — 日志脱敏:移除所有 sk- 开头的疑似 Key

安全:

  • 加密密钥来自环境变量 CREDENTIAL_ENCRYPTION_KEY
  • 明文 Key 不落库、不进日志、不返回前端
  • Admin 查询不返回明文
## 完成证据 **产物**: `src/modules/ai-runtime/credential-encryption.service.ts` (68 行) **提交**: `4cf2aa9` feat: 用户 AI 设置与 Key 管理 API (API-AI-011~015) **能力**: - `encrypt()` — AES-256-GCM 加密 → base64 - `decrypt()` — AES-256-GCM 解密 ← base64 - `hash()` — SHA-256 → hex(用于重复检测,不可逆) - `mask()` — 脱敏:sk-****xxxx - `redact()` — 日志脱敏:移除所有 sk- 开头的疑似 Key **安全**: - 加密密钥来自环境变量 CREDENTIAL_ENCRYPTION_KEY - 明文 Key 不落库、不进日志、不返回前端 - Admin 查询不返回明文
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: wangdl/api-server#176
No description provided.