高级6 分钟阅读
Webhook 安全最佳实践
用签名校验、幂等处理和密钥轮换,保证回调通知安全可靠。
上线前检查清单
- 仅允许 HTTPS 回调地址
- 校验时间戳并限制重放窗口
- 使用 HMAC 进行签名验证
- 每个事件实现幂等处理
- 异常回调写入审计日志
密钥轮换策略
建议每 90 天轮换一次 webhook secret。轮换期间短时同时支持新旧 secret,验证通过后逐步移除旧值。
幂等处理
对 `order_no + status` 建立唯一处理记录。重复事件直接返回 200,避免重复发货或重复记账。
Node.js
import crypto from 'crypto';
export function verifyWebhook({ rawBody, timestamp, signature, secret }) {
const payload = `${timestamp}.${rawBody}`;
const expected = crypto.createHmac('sha256', secret).update(payload).digest('hex');
return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(signature));
}