部署到Fly.io的Shopify自定义App OAuth回调及API请求失败求助
Shopify自定义App部署到Fly.io后OAuth回调400及会话令牌验证失败问题
问题描述
部署Shopify自定义App到Fly.io后出现两个核心异常:
- 开发商店安装完成后,OAuth回调立即返回400错误,响应提示
Invalid OAuth callback,回调URL示例:
https://appname.fly.dev/api/auth/callback?code=71bfdaadd63b87eb72d9d3dc516ea1ea&hmac=1efd4ff63ebca8f28c733f464ded354ba2f0995aeb1910114e0139eaefd4cce3&host=YWRtaW4uc2hvcGlmeS5jb20vc3RvcmUvc2hvb3B5bG9vcHkx&shop=shoopyloopy1.myshopify.com&state=920113322594675×tamp=1676563785
- API请求失败,调用
/api/路由时返回会话令牌签名验证错误:
Failed to parse session token 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczpcL1wvc2hvb3B5bG9vcHkxLm15c2hvcGlmeS5jb21cL2FkbWluIiwiZGVzdCI6Imh0dHBzOlwvXC9zaG9vcHlsb29weTEubXlzaG9waWZ5LmNvbSIsImF1ZCI6IjU4YTAzZjkwZTk4Yjc5NGRlZmE5NDZlMWZiNmVlMzRiIiwic3ViIjoiNzQ3NzAxNTM2NjEiLCJleHAiOjE2NzY1NjQyMjYsIm5iZiI6MTY3NjU2NDE2NiwiaWF0IjoxNjc2NTY0MTY2LCJqdGkiOiI0OTcyNDEwOC0zNWQ2LTRjODEtOWJkNS0wZWRkMWM4MWIxMDYiLCJzaWQiOiIxOGZmZjg5NTMyZGRiODdiOWQ3OTBhYmY1M2EwOTZiMDNkNmE4ZWU1ZTA0ZmRjZmFmOWUxOWM2OGQxZGFjN2Q2In0.XeuA5W95YjjVLZYOvmRJ9a90xpPNEukhNQ1_z4Kw_xA': signature verification failed
注:本地使用ngrok隧道时所有功能正常,已遵循Shopify官方部署文档,Dockerfile端口与fly.toml配置一致,可提供fly.toml、index.js及Shopify App配置代码。
排查与解决方案
1. 核对OAuth回调URL配置
- 检查Shopify后台App设置的Allowed redirection URL(s),必须完全匹配Fly.io部署地址:
https://appname.fly.dev/api/auth/callback,注意协议(HTTPS)、域名拼写、大小写及末尾无多余斜杠。 - 用
fly apps list命令核对Fly.io应用名称,确认域名无拼写错误。
2. 验证API密钥与环境变量
- 确保Fly.io环境变量中的
SHOPIFY_API_KEY、SHOPIFY_API_SECRET与Shopify后台App的对应值完全一致,无空格或字符遗漏。 - 执行
fly secrets list查看已配置的环境变量,确认配置无误。
3. 修复会话令牌验证问题
- 信任代理配置:在Express框架中添加代理信任设置,确保应用能识别Fly.io转发的HTTPS协议:
若使用Shopify Node.js库,需确保配置中app.set('trust proxy', true);hostName指向正确的Fly.io域名。 - 会话存储切换:本地开发使用的内存存储不适用于Fly.io多实例环境,需切换为Redis等持久化存储,保证会话信息跨实例共享。
- 时间同步检查:通过
fly ssh console进入实例执行date命令,核对服务器时间与Shopify服务器是否同步,时间偏差过大可能导致令牌过期验证失败。
4. 检查Fly.io网络配置
- 确认Dockerfile暴露端口与fly.toml中
internal_port一致,无端口映射错误。 - 检查Fly.io自动HTTPS证书是否生效,确保域名已配置合法SSL证书,避免HTTP请求触发OAuth验证失败。
5. 日志定位细节
- 执行
fly logs查看应用实时日志,重点关注OAuth回调阶段的错误堆栈、会话令牌生成/验证过程中的异常信息,快速定位配置遗漏点。
内容的提问来源于stack exchange,提问作者Mastah
相关产品推荐
相关产品推荐

