自定义应用 token 和 OAuth token 能混用吗
现象#
后台 Develop apps 里生成的 token 在服务里能跑,换成 OAuth 流程换来的 token 后同一段代码开始返回 401;店铺卸载应用后,本地缓存里的旧 token 还在继续被复用。
原因#
- 自定义应用 token 由店铺管理员在后台直接生成,只对单个店铺有效,没有授权码与回调地址
- OAuth token 由授权码交换得到,权限由应用配置的 scopes 决定,店铺卸载后立即失效
- 两者都放在
X-Shopify-Access-Token里,但自定义应用换不出 online token - 多店铺服务把 OAuth token 存成全局变量,后授权的店铺覆盖前一个,请求就落到错的店铺
处理步骤#
- 先分清来源:后台手工生成的是自定义应用,走过
/admin/oauth/authorize的是 OAuth 应用 - 按
xxx.myshopify.com做主键分表存 token,不要用店铺显示名或自定义域名 - 自定义应用的 token 放密钥管理服务,OAuth 应用同时存
access_token与scope两列 - 在
app/uninstalled回调里删除该店铺的 token,避免继续用失效凭据重试 - 用
query { shop { name myshopifyDomain } }回读,确认 token 指向的店铺没错
验收标准#
每家店的 token 调 shop 查询返回各自域名;卸载后请求变为 401,不会再把数据写进另一家店。
本文由 风格技术 技术团队整理,适用于 Shopify 标准版与 Plus 店铺。Shopify 平台能力迭代较快,具体操作路径与字段以官方文档和店铺后台实际版本为准。