轮换 client secret 后 webhook 验签全失败
现象#
在 Dev Dashboard 生成新 secret 并部署后,所有 webhook 都返回 401,日志里 HMAC 对不上,但旧 secret 明明还没撤销。
原因#
- Shopify 用最早一个未撤销的 secret 签名,轮换期间仍走旧 secret
- 代码只保留新 secret,旧签名一律拒绝,正好把真实 webhook 全挡掉
- 提前 revoke 旧 secret 会让仍在用旧 secret 签名的投递瞬间失败
- 多环境各存一份 secret,预发与生产不一致时验签结果随机
处理步骤#
- 在
Dev Dashboard的Credentials页点Rotate,先生成新 secret - 验签代码同时接受新旧两个 secret,按 header 逐个尝试,任一通过即放行
- 把 OAuth、token exchange 与 refresh 全部切到新 secret,观察 24 小时失败率
- 确认没有旧签名流量后再 revoke 旧 secret,保留回滚窗口
- 用
shopify webhook trigger发一条测试投递,核对 200 与签名结果
验收标准#
webhook 失败率为 0,日志显示轮换期新旧签名都通过,撤销旧 secret 后仅新签名通过。
本文由 风格技术 技术团队整理,适用于 Shopify 标准版与 Plus 店铺。Shopify 平台能力迭代较快,具体操作路径与字段以官方文档和店铺后台实际版本为准。