开发者文档

验证 API 渠道签名

使用原始请求字节、Unix 时间戳和 HMAC-SHA256 验证双向请求。

更新于 2026-07-24适合: 后端开发者 · 安全负责人

签名原文固定为:

{timestamp}.{rawBody}

请求头:

X-NavoChat-Timestamp: 1784196000
X-NavoChat-Signature: v1=<hex hmac sha256>

Node.js

import crypto from "node:crypto";

const body = Buffer.from(JSON.stringify(payload));
const timestamp = Math.floor(Date.now() / 1000).toString();
const signature = crypto
  .createHmac("sha256", process.env.NAVOCHAT_SIGNING_SECRET)
  .update(Buffer.concat([Buffer.from(`${timestamp}.`), body]))
  .digest("hex");

Python

import hashlib
import hmac
import time

timestamp = str(int(time.time()))
signature = hmac.new(
    secret.encode(),
    timestamp.encode() + b"." + raw_body,
    hashlib.sha256,
).hexdigest()

验签要求

  • 必须使用接收到的原始 Body 字节,不能重新序列化 JSON。
  • 时间偏差不得超过五分钟。
  • 使用恒定时间比较签名值。
  • 先验签,再解析或处理业务数据。
  • Callback 和入站请求使用同一密钥与算法。

相关指南