为保证用户数据的安全性,若您的应用已完成与蘑菇街开放平台对接,需要获取一些与用户紧密相关的信息(如订单、商品、促销等),需要征得用户的同意,获得用户的授权许可。蘑菇街开放平台采用国际通用的OAuth2.0标准协议,支持网站、桌面客户端、ERP系统(若要了解更多关于OAuth2.0的技术说明,请参考官方网站 http://oauth.net/2/ ) 。目前,蘑菇街开放平台的OAuth2.0支持以下方式获取Access Token。
方式 | 说明 |
---|---|
Server-side flow | 此流程要求ISV应用有Web Server应用,能够保存应用本身的密钥以及状态,可以通过http直接访问蘑菇街的授权服务器,可以通过RefreshToken刷新AccessToken保持授权有效。 |
Clinet-side Application | 此流程适合客户端应用,同时应用无法与浏览器交互,但是可以外调用浏览器,需要每次都授权,无法通过RefreshToken刷新AccessToken。 |
Refreshing Access Token | 用户如果在获取访问令牌时,同时获取到了刷新令牌,当访问令牌过期时,用户可以用刷新令牌刷新,从而延长访问令牌的时间,只有在Server-side flow才可以刷新。 |
1. AppKey
开发者创建的应用标识,创建应用后在 控制台》应用列表 可以看到。
1. AppSecret
标识应用身份,在 控制台》应用列表 可以得到,获取Code、请求加签时必要参数。
2. Code
用户授权授权给应用换取AccessToken与RefreshToken的key,获取AccessToken必要参数,有效期为5分钟,或换取AccessToken后失效。
3. AccessToken
应用通过Code换取到最终颁发给应用的令牌,调用API必要参数,有效期为7天,同一个用户对应一个AppKey只会生效最后一次授权的AccessToken与RefreshToken。
3. RefreshToken
在有效期内可以刷新对应的AccessToken,授权后与AccessToken一起返回,用来减少用户授权频率,要求应用存储每个用户对同一个AppKey最近一次授权返回的RefreshToken,有效期为14天,或刷新后失效。
4. redirect_uri及callback定义规则
redirect_uri指的是应用发起请求时,所传的回调地址参数,在用户授权后应用会跳转至redirect_uri。
callback指的是应用注册时填写的回调地址链接 或者网站接入时所验证的域名地址。
规则:
(1)对于Server-side flow,redirect_uri是必选参数,并且要求redirect_uri与callback的顶级域名一致。
(2)在不可预知错误的情况下,返回到默认错误页面。
此流程要求ISV或商家(自主研发应用)有web服务器,能够保持应用本身的密钥以及状态,可以通过http直接访问蘑菇街的授权服务器。
1.通过用户授权获取授权码Code(获取授权码链接)
通过拼接以下链接打开用户登录页面:https://oauth.mogujie.com/authorize?response_type=code&app_key=YOUR_APPKEY&redirect_uri=YOUR_REGISTERED_REDIRECT_URI&state=YOUR_CUSTOM_CODE
请求方法:GET
请求参数:
参数 | 是否必选 | 参数说明 |
---|---|---|
app_key | 是 | 接入时申请的app_key |
redirect_uri | 是 | 回调地址,请确保回调地址在授权域下,并UrlEncode进行编码。 |
response_type | 是 | 授权类型,此值固定为“code”。client_side flow 此值为token |
state | 否 | 用于第三方应用防止CSRF攻击,成功授权后回调时会原样带回。请务必严格按照流程检查用户与state参数状态的绑定。 |
返回说明:
如果用户成功登录并授权,则会跳转到指定的回调地址,并在redirect_uri地址后带上Authorization Code和原始的state值。
2.用上一步获取的Authorization Code,和AppSecret 通过Http POST方式换取Token。(获取访问令牌)
通过拼接以下链接(注意替换以下app_key、redirect_uri和state)打开用户登录页面:https://oauth.mogujie.com/token?code=YOUR_AUTHCODE&grant_type=authorization_code&app_key=YOUR_APPKEY&app_secret=YOUR_APPSECRET&redirect_uri=YOUR_REGISTERED_REDIRECT_URI
请求方法:GET
请求参数:
参数 | 是否必选 | 参数说明 |
---|---|---|
app_key | 是 | 接入时申请的app_key |
app_secret | 是 | 接入时申请的app_secret |
redirect_uri | 是 | 回调地址,与上一步的redirect_uri保持一致 |
grant_type | 是 | 授权类型,申请accesstoken流程中,此值为“authorization_code” |
code | 是 | 上一步中获取的Authorization Code |
state | 否 | 用于第三方应用防止CSRF攻击,成功授权后回调时会原样带回。请务必严格按照流程检查用户与state参数状态的绑定。 |
返回说明:(如果成功返回,即可获取如下参数)
参数 | 描述 |
---|---|
statusCode | 授权操作状态(0000000 - 授权成功) |
access_token | 授权令牌(AccessToken)。 |
access_expires_in | 该AccessToken的有效期,单位为秒。 |
refresh_token | 授权刷新令牌(RefreshToken)。 |
refresh_expires_in | 该RefreshToken的有效期,单位为秒。 |
此流程适合ISV没有自己的web服务器,且应用为原生程序,即客户端应用(同时应用无法与浏览器交互,但是可以外调用浏览器)。
请求的流程:(1)用户发起授权请求, 开放平台验证后获取code并置换出AccessToken 》 (2)获取url中的AccessToken 》 (3)调用API
1. 通过拼接以下链接(注意替换以下app_key、redirect_uri和state)打开用户登录页面,登录后进行授权(页面操作与Server-side-flow相同): https://oauth.mogujie.com/authorize?response_type=token&app_key=12304977&state=1212&redirect_uri=REDIRECT_URI
2. 直接从REDIRECT_URI中获取AccessToken信息。
最终返回的地址格式为:REDIRECT_URI/oauthCallBack/#access_token=6a42dbd2ef9cf3489a4913039838e12b
通过前两种流程,获取了Access token以及Refresh token(对于具有“获取Refresh token权限”的应用),但是一般来讲,AccessToken都有一定的时效性,在刷新有效时长内必须通过RefreshToken 来延迟Access token的时长。
请求的流程有:通过http post请求https://oauth.mogujie.com/token发送刷新。
请求参数:
参数 | 是否必选 | 参数说明 |
---|---|---|
app_key | 是 | 接入时申请的app_key |
app_secret | 是 | 接入时申请的app_secret |
grant_type | 是 | 授权类型,在刷新令牌的过程中,此值为“refresh_token”。 |
refresh_token | 是 | 用来刷新AccessToken的刷新令牌 |
state | 否 | 用于第三方应用防止CSRF攻击,成功授权后回调时会原样带回。请务必严格按照流程检查用户与state参数状态的绑定。 |
返回说明:(如果成功返回,即可获取如下参数)
参数 | 描述 |
---|---|
statusCode | 授权操作状态(0000000 - 授权成功) |
access_token | 新授权令牌(AccessToken)。 |
access_expires_in | 新AccessToken的有效期,单位为秒。 |
refresh_token | 新授权刷新令牌(RefreshToken)。 |
refresh_expires_in | 新RefreshToken的有效期,单位为秒。 |