企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## 授权说明 应用程序可通过调用速卖通开放平台提供的API获取到速卖通的会员、交易等数据,因为涉及隐私,在使用前必须获得速卖通会员的授权,方可调用API(公开数据除外),而access_token则做为用户唯一的授权标识。 速卖通开放平台采用OAuth 2.0作为授权协议,授权流程可以简单归纳为:  (1)获取临时令牌;  (2)用临时令牌换取长时令牌以及访问令牌;  (3)访问令牌过期后用长时令牌刷新访问令牌。  关于**临时令牌**、**访问令牌**以及**长时令牌**的介绍请参考下一节 ### 概念介绍展开 ### 授权分类 注意:请根据自己APP的情况选择对应的授权方式,如果使用了错误的授权方式可能给您APP的使用带来不便 **1、WEB端授权** 第三方开发者提供的app属于网页应用,可以自用或者自行售卖,用户直接在浏览器中输入app入口地址即可访问,那么这样的app就要采用WEB授权方式。 **2、客户端授权** 第三方开发者提供的app属于客户端应用,用户需要下载应用到本地客户端才能使用,那么这样的app就要采用客户端授权方式。 ### WEB端授权流程详解隐藏 授权及使用授权时序图 ![](http://gw.api.alibaba.com/image/cn/serverAuthProcess.png) 授权流程 如果已经授权并且得到refreshToken,那么可以参考[refreshToken换取accessToken流程详解](http://gw.api.alibaba.com/dev/doc/intl/sys_auth.htm?ns=aliexpress.open#exchangeAccessToken)一节;如果是首次授权,那么授权流程如下: **1) 用户使用app,访问在速卖通的隐私数据** **2) app发起授权请求** ~~~ http://authhz.alibaba.com/auth/authorize.htm?client_id=xxx&site=aliexpress&redirect_uri=YOUR_REDIRECT_URL&state=YOUR_PARM&_aop_signature=SIGENATURE a) client_id:app注册时,分配给app的唯一标示,又称appKey b) site:site参数标识当前授权的站点,直接填写aliexpress c) redirect_uri: app的入口地址,授权临时令牌会以queryString的形式跟在该url后返回 d) state:可选,app自定义参数,回跳到redirect_uri时,会原样返回 e) aop_signature:签名 参数签名(_aop_signature)为所有参数key + value 字符串拼接后排序,把排序结果拼接为字符串data后通过bytesToHexString(HAMC-RSA1(data, appSecret))计算签名。 验证签名的方式为对参数执行同样的签名,比较传入的签名结果和计算的结果是否一致,一致为验签通过。 注:只有客户端和WEB端授权流程发起授权请求这一步使用参数签名串组装规则,只用url请求参数作为签名因子;其他签名均需加入urlPath作为额外因子(见API签名串组装规则)。 ~~~ **3) 用户输入用户名密码,并确认授权** **4) 返回临时授权码code给app**  具体返回方式,参照redirect_uri说明 **5) 使用code获取令牌** ~~~ https://gw.api.alibaba.com/openapi/http/1/system.oauth2/getToken/YOUR_APPKEY?grant_type=authorization_code&need_refresh_token=true&client_id= YOUR_APPKEY&client_secret= YOUR_APPSECRET&redirect_uri=YOUR_REDIRECT_URI&code=CODE 注:此接口必须使用POST方法提交;必须使用https getToken接口参数说明: a) grant_type为授权类型,使用authorization_code即可 b) need_refresh_token为是否需要返回refresh_token,如果返回了refresh_token,原来获取的refresh_token也不会失效,除非超过半年有效期 c) client_id为app唯一标识,即appKey d) client_secret为app密钥 e) redirect_uri为app入口地址 f) code为授权完成后返回的一次性令牌 g) 调用getToken接口不需要签名 注:如果超过code有效期(2分钟)或者已经使用code获取了一次令牌,code都将失效,需要返回第二步重新获取code ~~~ **6) 返回令牌**  getToken返回结果:{"aliId":"8888888888","resourceOwner":"xxx","expires_in":"36000","access_token":"8795258a-6c8f-43a5-b8d0-763631edb610","refresh_token":"8795258a-6c8f-43a5-b8d0-763631edb610","refresh_token_timeout":"20121222222222+0800"}  说明:resource_owner为登录id,aliId为阿里巴巴集团统一的id,refresh_token_timeout表示refreshToken的过期时间 **7) 使用令牌访问用户隐私数据**  例如访问以下api:http://gw.api.alibaba.com/openapi/param2/1/aliexpress.open/api.findAeProductById/1?productId=xxx&access_token=ACCESS_TOKEN&_aop_signature=SIGENATURE  签名示例见[API签名规则](http://gw.api.alibaba.com/dev/doc/intl/sys_signature.htm?ns=aliexpress.open#apiRule) ### refreshToken换取accessToken流程详解隐藏 换取accessToken流程 如果refreshToken有效并且accessToken已经过期(超过10小时),那么可以使用refresh_token换取access_token,不用重新进行授权,然后访问用户隐私数据。 注意:如果refreshToken已经超过了半年的有效期,用户修改密码,用户订购到期或者用户通过[取消授权工具](http://authhz.alibaba.com/auth/intl/my.htm)取消了对app的授权,那么都需要用户重新授权获取refreshToken ~~~ 换取accessToken的url示例如下: https://gw.api.alibaba.com/openapi/param2/1/system.oauth2/getToken/YOUR_APPKEY 请求参数如下: grant_type=refresh_token&client_id=YOUR_APPKEY&client_secret=YOUR_APPSECRET&refresh_token=REFRESH_TOKEN 注:此接口必须使用POST方法提交;必须使用https a) 此处grant_type参数必须为refresh_token,表示通过refreshToken换取accessToken,而不是通过临时code换取 b) 调用getToken接口时不需要签名 ~~~ ### 换取新的refreshToken流程详解隐藏 换取refreshToken流程 如果当前时间离refreshToken过期时间在30天以内,那么可以调用postponeToken接口换取新的refreshToken;否则会报错。 注意:有自动功能的应用(用户不进入应用主页也能使用第三方应用,因为在应用后台可以自动调用api处理用户数据,如自动重发类的应用)才需要调用此接口。如果没有自动功能,那么不需要调用,因为用户必须在应用主页操作才能获取以及修改用户数据,所以即使refreshToken过期了,用户再次通过应用市场进入应用主页时授权一次即可 ~~~ 换取refreshToken的url示例如下: https://gw.api.alibaba.com/openapi/param2/1/system.oauth2/postponeToken/YOUR_APPKEY 请求参数如下: client_id=YOUR_APPKEY&client_secret=YOUR_APPSECRET&refresh_token=REFRESH_TOKEN&access_token=ACCESS_TOKEN 返回结果类似getToken的返回结果: {"aliId":"8888888888","resource_owner":"xxx","memberId":"xxxxxxx","expires_in":"36000","refresh_token":"479f9564-1049-456e-ab62-29d3e82277d9","access_token":"f14da3b8-b0b1-4f73-a5de-9bed637e0188","refresh_token_timeout":"20121222222222+0800"} 注:此接口必须使用https,get和post都行 a) 调用postponeToken接口需要授权,所以必须带上access_token参数 b) 调用postponeToken接口时不需要签名 c) refresh_token参数表示当前使用的refreshToken,如果refreshToken的有效期和当前时间的差值小于30天,那么调用此接口后当前使用的refreshToken失效,返回一个新的refreshToken ~~~