You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Shopify客户账号的NodeJS API移动端认证方案咨询

基于Shopify客户账号的认证方案实现

核心思路

利用Shopify官方的客户账户OAuth 2.0流程验证客户身份,通过你的NodeJS服务完成Shopify回调校验、客户信息获取,最后签发自身API使用的JWT令牌,供移动端访问你的API。

具体实现步骤

1. 配置Shopify店铺的客户OAuth权限

  • 登录Shopify后台,进入「设置」→「应用和销售渠道」→「开发应用」,创建自定义应用
  • 在「配置API范围」中找到「Customer account API」,勾选read_customers权限(需修改客户信息可额外勾选write_customers)
  • 进入「应用设置」→「客户账户OAuth设置」,添加你的NodeJS服务回调地址(例如https://your-api-domain.com/auth/shopify/customer/callback)
  • 记录好客户账户OAuth客户端ID和客户端密钥(注意区分Shopify Admin API的密钥,这是专门用于客户认证的密钥)

2. 移动端触发认证跳转

  • 构造Shopify客户授权URL,参数如下:
    https://{你的店铺域名}/account/oauth/authorize
    ?client_id={客户OAuth客户端ID}
    &redirect_uri={你的回调地址}
    &scope=read_customers
    &response_type=code
    &state={随机生成的防CSRF字符串}
    
  • 移动端通过WebView或系统浏览器打开该URL,用户将进入Shopify官方登录页面,输入自身账号密码完成登录并授权

3. NodeJS服务处理回调并签发JWT

  • 接收Shopify回调的code和state参数,首先验证state与移动端发起请求时生成的随机串一致,防止CSRF攻击
  • 用code向Shopify请求访问令牌:
    // 示例:用axios发送请求
    const axios = require('axios');
    const tokenRes = await axios.post(`https://${你的店铺域名}/account/oauth/token`, {
      client_id: process.env.SHOPIFY_CUSTOMER_OAUTH_CLIENT_ID,
      client_secret: process.env.SHOPIFY_CUSTOMER_OAUTH_CLIENT_SECRET,
      code: req.query.code,
      redirect_uri: process.env.SHOPIFY_CUSTOMER_OAUTH_REDIRECT_URI,
      grant_type: 'authorization_code'
    });
    const shopifyAccessToken = tokenRes.data.access_token;
    
  • 用获取到的shopifyAccessToken调用Shopify客户API获取当前用户信息:
    const customerRes = await axios.get(`https://${你的店铺域名}/account/api/2024-07/me`, {
      headers: {
        'Authorization': `Bearer ${shopifyAccessToken}`,
        'Content-Type': 'application/json'
      }
    });
    const customerInfo = customerRes.data.customer;
    
  • 验证客户信息有效后,签发你的API所用JWT:
    const jwt = require('jsonwebtoken');
    const apiJwtToken = jwt.sign(
      { customerId: customerInfo.id, email: customerInfo.email },
      process.env.YOUR_JWT_SECRET,
      { expiresIn: '24h' }
    );
    
  • 将JWT传递给移动端:可以通过回调页面的JS跳转到APP自定义Scheme(例如yourapp://auth/success?token=${apiJwtToken}),或直接在WebView中把令牌传递给原生代码

4. 移动端访问你的API

  • 移动端拿到JWT后,在后续请求你的NodeJS API时,将令牌放在请求头:Authorization: Bearer {apiJwtToken}
  • 你的API现有JWT认证层直接校验该令牌有效性,通过后允许访问资源

关键注意点

  • 必须校验state参数,避免跨站请求伪造
  • Shopify API版本需使用当前支持的稳定版本(示例中为2024-07),注意定期更新
  • 可实现令牌刷新逻辑:Shopify OAuth返回的refresh_token可用于获取新的Shopify access token,进而重新签发你的JWT,避免用户频繁重新登录

内容的提问来源于stack exchange,提问作者Chinthaka Dinadasa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 17:45:37