Webhook 签名校验指南
在信任请求之前,必须基于原始 body 校验第三方签名。
最近更新: 2026-06-24
Webhook 签名校验的作用,是证明这条 payload 的确来自第三方,并且在传输过程中没有被篡改。它应该发生在你真正信任事件内容之前。
通用流程
- 读取原始请求 body。
- 读取第三方提供的签名 header。
- 用共享 secret 计算期望摘要。
- 用常量时间比较方式进行校验。
- 不匹配就拒绝。
常见错误
- 用解析后的 JSON 做校验,而不是 raw body
- 把 shared secret 打到日志里
- 生产环境接受未签名请求
FAQ
哪些服务会使用签名?
Stripe、GitHub、Shopify、Slack 等大多数成熟平台都会这样做。
为什么要常量时间比较?
它可以减少基于时间差的侧信道泄露风险。
具体示例可看: