App Proxy 签名校验失败一直被 403 怎么排
现象#
前台访问 /apps/reviews 时接口返回 403,日志里是自己代码抛的 Invalid signature;把校验注释掉页面立刻正常,说明转发链路没问题。
原因#
- 算 HMAC 时用了 API secret key,而不是应用自己的 shared secret
- 参与签名的参数没有按 key 升序排列,多值参数也没有用逗号合并,拼出的串与 Shopify 不一致
- 把
signature本身也拼进了待签名串,或对path_prefix做了二次解码 - 端点只验签名不验
logged_in_customer_id,把别人的数据返回给了当前访客
处理步骤#
- 取完整 query string,剔除
signature后按参数名升序排列 - 每个参数拼成
key=value,多值用逗号连接,参数之间不加与号直接相连 - 用 shared secret 做
HMAC-SHA256并转成小写十六进制,与 signature 做常量时间比较 - 校验失败返回
403,同时记录 shop 与 timestamp,区分攻击流量和配置错误 - 通过后用
logged_in_customer_id再查一次数据归属,别只信签名
验收标准#
正常访问返回 200 且日志无签名错误;手工改动 query 中任一参数后请求立刻变成 403。
本文由 风格技术 技术团队整理,适用于 Shopify 标准版与 Plus 店铺。Shopify 平台能力迭代较快,具体操作路径与字段以官方文档和店铺后台实际版本为准。