#
一.前期准备开放授权系统是基于OAuth2.0协议标准构建的京东开放平台授权系统.支持JOS网关接口授权调用, 京东账号联合登录等功能
1.在进行京东开放系统对接的之前, 在京东开放平台注册开发者账号.
2.并拥有一个已审核通过的应用, 并获得相应的AppKey和AppSecret.
3.应用审核通过后会自动获取AppKey 与 AppSecret.
#
二.授权流程说明京东授权流程是基于OAuth2.0授权让京东用户使用京东身份安全登录第三方应用或服务, 在京东用户授权登录已接入京东Oauth2.0的第三方应用后, 第三方可以获取到用户的接口调用凭证(access_token), 通过access_token可以进行京东开放平台授权关系接口调用, 从而实现获取京东用户基本开放信息和帮助用户实现基础开放功能等.京东Oauth2.0授权目前支持authorization_code模式, 该模式整体流程为:
1.第三方发起京东授权请求, 京东用户允许授权第三方应用后,京东会拉起应用或重定向到第三方应用网站, 并且带上授权临时票据code参数
2.通过code参数加上AppID和AppSecret等, 通过API换取access_token
3.通过access_token进行接口调用, 获取用户基本数据资源或帮助用户实现基本操作
#
三.调用示例1.请求code
https://open-oauth.jd.com/oauth2/to_login?app_key=XXXXX&response_type=code&redirect_uri=XXXXX&state=20180416&scope=snsapi_base
参数说明:
参数 | 是否必须 | 说明 |
---|---|---|
app_key | 是 | 应用标识 |
response_type | 是 | 固定为code |
redirect_uri | 是 | 回调地址,必须与开发者控制里的URL保持一致 |
scope | 是 | 应用的作用域(snsapi_base或snsapi_union_login) |
state | 否 | 用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加session进行校验 |
返回说明:
用户允许授权后,会跳转到指定的redirect_uri并多添加两个参数code和state参数
redirect_uri?code=CODE&state=STATE
若用户禁止授权,则会重定向后不会带上code参数, 仅会带上state参数
redirect_uri?state=STATE
2.通过code获取access_token
参数说明:
参数 | 是否必须 | 说明 |
---|---|---|
app_key | 是 | 应用标识 |
app_secret | 是 | 应用密钥 |
grant_type | 是 | 固定为authorization_code |
code | 是 | 为步骤1中获取的code |
返回说明:
{
access_token: "a3207b6b5ad04249ad1dbf6a98248bea",
expires_in: 3600000,
refresh_token: "4ecbbab0e9e443159c518da1d10741ad",
scope: "snsapi_base",
open_id: "jos_dev"
}
返回参数说明:
参数 | 说明 |
---|---|
access_token | 接口调用令牌 |
expires_in | 令牌有效时间, 单位秒 |
refresh_token | 用户刷新access_token |
scope | 用户授权的作用域,使用逗号(,)分隔 |
open_id | 授权用户唯一标识 |
错误返回样例:
{"code":40029,"msg":"invalid code",”uid”:”xxxxxx”}
3.刷新access_token有效期
参数说明:
参数 | 是否必须 | 说明 |
---|---|---|
app_key | 是 | 应用标识 |
app_secret | 是 | 应用密钥 |
grant_type | 是 | 固定为refresh_token |
refresh_token | 是 | 步骤2或前一次步骤3获取的refresh_token |
返回说明:
{
access_token: "a3207b6b5ad04249ad1dbf6a98248bea",
expires_in: 3600000,
refresh_token: "4ecbbab0e9e443159c518da1d10741ad",
scope: "snsapi_base",
open_id: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
返回参数说明:
参数 | 说明 |
---|---|
access_token | 接口调用令牌 |
expires_in | 令牌有效时间, 单位秒 |
refresh_token | 用户刷新access_token |
scope | 用户授权的作用域,使用逗号(,)分隔 |
open_id | 授权用户唯一标识 |
错误返回样例:
{"code":40029,"msg":"invalid code",”requestId”:”xxxx”}