AWS API Gateway环境下如何用Shopify Node API从会话获取access token
解决方案
方案1:构造兼容参数调用loadCurrentSession
Shopify.Utils.loadCurrentSession 本质只需要从请求对象中提取授权头、Cookie等信息,不会对响应对象执行实际的返回操作,你只需要从Lambda入参中构造兼容的req对象,再Mock一个空的res对象即可:
- 第一步:从API Gateway event构造req对象
const req = { headers: event.headers, query: event.queryStringParameters || {}, cookies: event.cookies || [], // HTTP API v2集成可直接取,REST集成需要自行从headers.Cookie解析 method: event.requestContext.http.method }
- 第二步:Mock res对象,仅需实现工具方法依赖的几个空函数即可
const res = { getHeader: () => undefined, setHeader: () => {}, end: () => {} }
- 第三步:正常调用方法即可
const session = await Shopify.Utils.loadCurrentSession(req, res)
方案2:直接用自定义JWT验证逻辑获取AccessToken(更适配无服务器环境)
你已经实现了会话令牌的JWT解码能力,可以直接用这个逻辑绕开对Express风格参数的依赖:
- 从请求头
Authorization中提取Bearer令牌,用你的自定义函数解码得到JWT payload,结构如下:
{ "iss": "店铺的后台域名", "dest": "店铺的域名", "aud": "接收应用的API key", "sub": "会话对应的用户ID", "exp": "会话令牌过期时间", "nbf": "会话令牌生效时间", "iat": "会话令牌签发时间", "jti": "安全随机UUID", "sid": "用户+应用维度的唯一会话ID" }
- 用解码得到的
iss(店铺域名)和sid(会话ID)作为查询条件,直接从你存储AccessToken的数据库中查询对应的记录,即可拿到可用的AccessToken。
注意事项
如果你的API Gateway用的是v1 REST集成,Cookie不会自动拆分到event.cookies字段,需要你自行从event.headers.Cookie字符串中解析出各个Cookie键值对,再赋值给req.cookies即可。
内容的提问来源于stack exchange,提问作者Bractar
相关产品推荐
相关产品推荐

