Shopify Admin API

App Proxy 签名校验失败一直被 403 怎么排

现象#

前台访问 /apps/reviews 时接口返回 403,日志里是自己代码抛的 Invalid signature;把校验注释掉页面立刻正常,说明转发链路没问题。

原因#

  • 算 HMAC 时用了 API secret key,而不是应用自己的 shared secret
  • 参与签名的参数没有按 key 升序排列,多值参数也没有用逗号合并,拼出的串与 Shopify 不一致
  • 把 signature 本身也拼进了待签名串,或对 path_prefix 做了二次解码
  • 端点只验签名不验 logged_in_customer_id,把别人的数据返回给了当前访客

处理步骤#

  1. 取完整 query string,剔除 signature 后按参数名升序排列
  2. 每个参数拼成 key=value,多值用逗号连接,参数之间不加与号直接相连
  3. 用 shared secret 做 HMAC-SHA256 并转成小写十六进制,与 signature 做常量时间比较
  4. 校验失败返回 403,同时记录 shop 与 timestamp,区分攻击流量和配置错误
  5. 通过后用 logged_in_customer_id 再查一次数据归属,别只信签名

验收标准#

正常访问返回 200 且日志无签名错误;手工改动 query 中任一参数后请求立刻变成 403。

本文由 风格技术 技术团队整理,适用于 Shopify 标准版与 Plus 店铺。Shopify 平台能力迭代较快,具体操作路径与字段以官方文档和店铺后台实际版本为准。