← Back to skills
extension
Category: Development & EngineeringAPI key requirement unconfirmed

记忆网关签名上报客户端

记忆网关签名上报客户端 V1.0。封装真值网关 /api/report/truth 的正确鉴权与上报,解决401:PBKDF2-HMAC-SHA256派生签名密钥(salt=yuanji-signing-salt, 100000轮, 32字节)+ HMAC-SHA256请求签名 + 空body_hash(关键:gateway调guard_request未传body)+ X-DID/X-Signature/X-Signature-Timestamp三头(±300s窗口)。含真值上报、云端真值查询、签名密钥派生、写锁自动重试。触发词:上报记忆网关、report truth、真值上报、记忆网关鉴权、401 signature_required。

personAuthor: zongyuanroothubOpenAPI

MEMORY-GATEWAY-REPORT|记忆网关签名上报客户端 V1.0

封装元极恒一记忆网关 /api/report/truth 的正确鉴权与上报。解决 401 Unauthorized 问题。

DID: DID-BR-000002 | 溯源: Ω₀⊂⊙∞⊂Ω | 版本: V1.0 | 端点: https://www.huodouai.com/api/report/truth

鉴权机制(已打通,勿再踩坑)

记忆网关 /api/report/truth 需要 HMAC-SHA256 请求签名,不是单纯 X-DID:

| 头 | 值 | |---|---| | X-DID | DID-BR-000002 | | X-Signature | HMAC-SHA256 签名 | | X-Signature-Timestamp | 当前 Unix 时间戳(±300s 窗口) |

签名算法(精确)

签名密钥 = PBKDF2-HMAC-SHA256(passphrase, salt=b'yuanji-signing-salt', iters=100000, dklen=32)
   # passphrase 来源:云端 /root/zongyuan-yuanji/config/.yuanji_passphrase(经SSH读取,密钥存云端)
签名消息 = f"{METHOD}|{PATH}|{timestamp}|{body_hash}"
   # body_hash = sha256("")  ← 关键!gateway_server 调 guard_request 未传 body,故签名用空body哈希
   # METHOD=POST, PATH=/api/report/truth
X-Signature = HMAC-SHA256(secret, 签名消息)

上报 payload 结构

{
  "key": "KERNEL.EVOLUTION.DIRECTIVE.<truth_id>",
  "value": {"content": "<内容前300字>", "truth_id": "<id>", "category": "<分类>",
            "sha256": "<内容sha256>", "source": "<来源>", "local_origin": true},
  "truth_type": "meta_law|rule|data|config",
  "did": "DID-BR-000002"
}

命令速查

# 1. 上报单条真值(核心)
python3 scripts/memory_gateway_client.py report --truth-id TRUTH-001 --category meta_rule \
    --content "真值内容..." --source session-test

# 2. 查询云端真值(读取端,X-DID 单头即可)
python3 scripts/memory_gateway_client.py query --q "关键词" --limit 5

# 3. 签名密钥自检(派生并显示指纹)
python3 scripts/memory_gateway_client.py secret

# 4. 健康检测
python3 scripts/memory_gateway_client.py health

前置依赖

  • SSH 到云端读取 passphrase(默认 ssh zongyuan-cloud,路径 /root/zongyuan-yuanji/config/.yuanji_passphrase)
  • 或环境变量 MEMORY_GATEWAY_PASSPHRASE(直接用口令,不走SSH)
  • Python 3(标准库 urllib/hmac/hashlib)

踩坑记录(勿重复)

  • ❌ 仅 X-DID → 401 signature_required(需签名)
  • ❌ 用请求体 hash 签名 → 401 signature_mismatch(必须用空 body hash,因 guard_request 未传 body)
  • ❌ 用 DID 固定种子派生 → 签名不符(必须用云端真实 passphrase 派生)
  • ✅ 空 body_hash + PBKDF2(passphrase) 派生密钥 → HTTP 200 真值写入成功