跳到主要内容

Webhook 与集成

校验 webhook 签名

要在解析 JSON 之前,对原始请求体计算签名,并用常量时间比较。把载荷重新序列化会改变字节,签名从此再也对不上。

步骤

  1. 把原始请求体作为字节抓住。多数框架默认给你的是已解析的对象,那时已经太迟。
  2. 就对那些字节本身,用你这一端的密钥计算签名。
  3. 用常量时间比较来核对,而不是字符串相等。
  4. 只有在签名校验通过之后,才去解析 JSON。
  5. 拒绝一切不通过的,并且记录投递 ID 而不是请求体。

如何验证结果

真实的投递能通过校验,而同一个载荷改动一个字符就通不过。

常见的出错之处

  • 在算签名之前先解析、又重新序列化。
  • 解析请求体的中间件抢在你的处理函数之前把流吃掉了。
  • 对签名用了朴素的 ===,它会从耗时上泄漏。
这篇文章解决了你的问题吗

这没有帮上忙

请写信给我们,附上平台与版本、你走过的步骤、期望的结果,以及相关的工作区或二维码。附上任何东西之前,请先遮蔽全部机密信息。

写信给支持团队