访问令牌
访问令牌是商家同意安装应用过程中平台授予应用的令牌,允许应用使用该访问令牌访问 REST APIs 与平台进行交互。Genstore 提供了两种获取访问令牌的方法:令牌交换和授权码授予。嵌入式应用推荐使用令牌交换,而非嵌入式应用则需通过授权码授予方式获取。
令牌交换
令牌交换基于 OAuth 2.0 令牌交换规范,适用于嵌入式应用,可通过 App Bridge 获取。
实现令牌交换的步骤
- 会话令牌请求:应用从浏览器通过嵌入式应用重定向,请求会话令牌。
- 验证并获取访问令牌:后端验证会话令牌并请求新的访问令牌。
- 使用访问令牌:Genstore 验证并返回新的访问令牌,应用使用该令牌调用 APIs。
令牌交换 API
请求格式如下:
bash
POST https://{shop}.genmystore.com/oauth2/token
参数说明:
shop
:用户的商店名称。clientId
:应用的客户端 ID。clientSecret
:应用的客户端秘钥。grantType
:授权类型,此处为token-exchange
subjectToken
:会话 IDrequestedTokenType
:请求的令牌类型,在线指定online-access-token
,默认为离线。
TIP
关于在线和离线令牌,可阅读 在线访问令牌与离线访问令牌
示例
令牌交换请求:
bash
curl -X POST \
https://{shop}.genmystore.com/oauth2/token \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-d '{
"clientId": "{client_id}",
"clientSecret": "{client_secret}",
"grantType": "token-exchange",
"subjectToken": "{session_token}",
"requestedTokenType": "online-access-token"
}'
令牌交换响应:
- 在线令牌
bash
{
"accessToken": "3f56c8bf63277ef253027f17",
"scope": "write_orders,read_products",
"expiresIn": 86399,
"associatedUser": {
"id": 1818181818,
"email": "[email protected]"
}
}
- 离线令牌
bash
{
"accessToken": "3f56c8bf63277ef253027f17",
"scope": "write_orders,read_products"
}
授权码授予
非嵌入式应用需使用 OAuth 2.0 的授权码授予 方式获取访问令牌,遵循 OAuth 2.0 的行业标准规范。
授权码授予过程
- 用户访问应用,应用引导用户至授权页面。
- 用户同意授权后,授权中心返回授权码。
- 应用使用授权码请求访问令牌。
- Genstore 返回访问令牌,应用使用该令牌访问所需资源。
请求授权码
请求格式如下:
bash
POST https://{shop}.genmystore/oauth2/authorize?clientId={client_id}&scope={scopes}&redirectUri={redirect_uri}&state={nonce}&requestedTokenType={access_mode}
参数说明:
shop
:用户的商店名称。clientId
:应用程序的客户端 ID。scope
:授权范围redirectUri
:回调地址state
:用于应用安全校验,将在返回授权码时回传此参数requestedTokenType
:设置访问模式。在线指定online-access-token
,默认为离线。
TIP
关于在线和离线令牌,可阅读 在线访问令牌与离线访问令牌
通过授权码换取访问令牌
请求格式如下:
bash
POST https://{shop}.genmystore.com/oauth2/token
参数说明:
clientId
:应用程序的客户端 ID。clientSecret
:应用程序的客户端秘钥。grantType
:授权码方式,枚举值 "code"。code
:授权码。
示例
请求:
bash
curl -X POST \
https://{shop}.genmystore.com/oauth2/token \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-d '{
"clientId": "{client_id}",
"clientSecret": "{client_secret}",
"grantType": "code",
"code": "{code}",
}'
响应
- 在线令牌
bash
{
"accessToken": "3f56c8bf63277ef253027f17",
"scope": "write_orders,read_products",
"expiresIn": 86399,
"associatedUser": {
"id": 1818181818,
"email": "[email protected]"
}
}
- 离线令牌
bash
{
"accessToken": "3f56c8bf63277ef253027f17",
"scope": "write_orders,read_products"
}
在线访问令牌与离线访问令牌
创建 API 访问令牌时,可以在两种访问模式之间进行选择:离线和在线,默认为离线。
在线访问令牌
- 具有在线访问模式的令牌与商店中的单个用户相关联,其中访问令牌的生命周期与用户的 Web 会话的生命周期相匹配。
- 在线访问适用于用户通过网络与应用交互时,应用必须尊重个人用户的权限级别时的场景。
- 应用的安全要求指定了对商店的短期访问。具有在线访问模式的令牌将在用户注销时不可使用。
离线访问令牌
- 具有离线访问模式的令牌用于长期访问商店,其中不涉及任何用户交互。离线访问模式非常适合响应 Webhook 的后台工作,或后台作业中的维护工作。
- 多次授权应用离线访问时,每次都会返回相同的访问令牌。获得商店的离线访问权限后,仅在卸载应用后或需要其他访问范围时才需要重新授权应用。
- 使用离线访问模式创建的访问令牌是永久性的。仅当从商店卸载应用程序时,它们才会被撤销。