现象
你的 Webhook 端点收到了请求,但签名验证失败。常见原因
- 框架在验签前解析或重新格式化了 JSON。
- 验签代码使用了错误的 Webhook 密钥。
- 中间件修改了请求体的空格、编码或字段顺序。
- 时间戳被当成秒处理,而不是 Unix 毫秒。
- 待签名字符串拼接格式错误。
- 签名比较没有使用恒定时间比较函数。
在 Kyren 中检查
- 从开发者设置复制当前 Webhook 密钥。
- 确认请求头包含
X-Kyren-Signature和X-Kyren-Timestamp。 - 确认时间戳是毫秒级时间戳,例如
1736932200000。
在你的服务端检查
- 在 JSON 解析前,使用原始请求体字节进行验签。
- 按
timestamp + "." + raw_body构造待签名字符串。 - 使用 Webhook 密钥计算
sha256=加 HMAC-SHA256 摘要。 - 使用恒定时间函数比较预期签名和收到的签名。