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 真值写入成功
微信扫一扫