首页 > 开发文档 > 授权获取accesstoken

授权获取accesstoken

登录授权

    如果您的应用和京东开放平台对接时需要获取用户隐私数据(如商品、订单等),为保证用户数据的安全与隐私,您的应用需要取得用户的授权,即获取访问用户数据的授权令牌 Access Token。这种情况下,您的应用需要引导用户完成使用京东帐号登录授权的流程。该流程采用国际通用的OAuth2.0标准协议作为用户身份验证与授权协议。


前期准备

开放授权系统是基于OAuth2.0协议标准构建的京东开放平台授权系统.支持JOS网关接口授权调用京东账号联合登录等功能

1.在进行京东开放系统对接的之前在京东开放平台注册开发者账号.

2.并拥有一个已审核通过的应用并获得相应的AppKeyAppSecret.

3.应用审核通过后会自动获取AppKey  AppSecret


流程说明

京东授权流程是基于OAuth2.0授权让京东用户使用京东身份安全登录第三方应用或服务在京东用户授权登录已接入京东Oauth2.0的第三方应用后第三方可以获取到用户的接口调用凭证(access_token), 通过access_token可以进行京东开放平台授权关系接口调用从而实现获取京东用户基本开放信息和帮助用户实现基础开放功能等.京东Oauth2.0授权目前支持authorization_code模式该模式整体流程为:

1.第三方发起京东授权请求京东用户允许授权第三方应用后,京东会拉起应用或重定向到第三方应用网站并且带上授权临时票据code参数

2.通过code参数加上AppIDAppSecret通过API换取access_token

3.通过access_token进行接口调用获取用户基本数据资源或帮助用户实现基本操作


特别注意

此文档描述的授权页面仅适用于通过浏览器访问宙斯安全登录授权链接场景



一.网站服务器授权模式

    此流程要求ISV应用有Web Server应用,能够保存应用本身的密钥以及状态,可以通过https直接访问京东的授权服务器。

1、请求入口地址

1)获取授权码(code
https://open-oauth.jd.com/oauth2/to_login

2)获取访问令牌(access_token

https://open-oauth.jd.com/oauth2/access_token

注意:如授权账号(商家为主账号)修改密码则授权码(Access token)随之失效,需重新授权。

2、授权操作步骤

       实际进行授权操作时,测试的数据 app_keyapp_secretredirect_uri 均需要根据自己创建的应用实际数据给予替换,不能拿示例中给出的值直接进行测试,以免影响实际测试效果。下图为网页服务器模式授权方式流程图,以下按流程图逐步说明。

1)拼接授权url
    拼接用户授权需访问url ,示例及参数说明如下:
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进行校验

 

2)引导用户登录授权
    引导用户通过浏览器访问以上授权url,将弹出如下登录授权页面。用户输入账号、密码点登录按钮,即完成授权流程。在PC浏览器里,该页面支持授权用户京东APP扫码登录;若授权用户已经在该浏览器中登录京东,则可实现一键授权登录。

3)获取code

    上图页面,若用户点“登录按钮后,JOS会跳转到指定的redirect_uri并多添加两个参数codestate参数,应用可以获取并使用该code去换取access_token

返回示例:

redirect_uri?code=CODE&state=STATE

说明

    可发布服务市场(fw.jd.com)的应用,在应用上线后,如购买应用的用户,通过"我的服务--立即使用访问(下图),系统会自动跳到授权页面(因此这种方式访问应用的,不需要拼接url),只需注意获取code即可。同时返回code时,还会返回通过state传递订购服务相关的信息;

注意:state中如果有“+”号,因浏览器交互的原因,会出现“+”号替换成空格的现象,导致授权报错如果出现此种情况,请把的state 中的空格再替换成“+”号,state后面的是经过base64编码,使用者可以通过收费项目编码或者版本号来指定自己软件对应的服务并可以通过接口进行验证参数的正确性,反编码后内容如下:

{
"jos_parameters":

{
"app_key": "CB69F1769C4B110D010D128E41030C94",
"end_date": 1469289600000,
"item_code": "FW_GOODS-233232-1",
"source": "JM",
"user_name": "sop_order",
"version_no": 1
}
}

返回参数说明

参数

说明

item_code

购买的收费项目编码

user_name

购买人

end_date

到期时间

version_no

购买的版本号

source

标识调用来源




4)通过code获取access_token

    将code拼接为以下URL

https://open-oauth.jd.com/oauth2/access_token?app_key=XXXXX&app_secret=XXXXX&grant_type=authorization_code&code=XXXXX

参数说明

参数

是否必须

说明

app_key

应用标识

app_secret

应用密钥

grant_type

固定为authorization_code

code

为步骤3中获取的code

换取access_token返回值示例

{

access_token: "a3207b6b5ad04249ad1dbf6a98248bea",

expires_in: 3600000,

refresh_token: "4ecbbab0e9e443159c518da1d10741ad",

scope: "snsapi_base",

open_id: "jos_dev"

}

返回参数说明

参数

说明

access_token

接口调用令牌

expires_in

令牌有效时间单位秒

refresh_token

refresh_token 是用来程序方式延长 token 有效期, token 维度新增加 refresh_token 调用次数限制为 500/

scope

用户授权的作用域,使用逗号(,)分隔

open_id

授权用户唯一标识

 

注意:应用回调地址需要在控制台中维护在应用基本信息中

5)退出登录(开发中)

1.请求地址:

2.退出操作步骤:

拼接退出url并访问即可,退出后会自动跳转到京东首页




二.客户端授权模式(开发中)

    客户端应用授权方式,适合ISV没有独立的web Server,但是能够借助浏览器或者JS脚本访问授权服务器的应用。

1、请求入口地址

正式环境:https://open-oauth.jd.com

2、授权操作步骤

授权过程中app_key等参数需要根据自己创建应用的实际数据给予替换,否则无法完成授权。

下图为客户端授权方式流程图,以下按流程图逐步详细说明



三.刷新授权有效期

    拼接url

https://open-oauth.jd.com/oauth2/refresh_token?app_key=XXXXX&app_secret=XXXXX&grant_type=refresh_token&refresh_token=XXXXX

参数说明

参数

是否必须

说明

 

app_key

应用标识

 

app_secret

应用密钥

 

grant_type

固定为refresh_token

 

refresh_token

获取access_token时同时获取的refresh_token

 

刷新授权有效期返回值示例:

{
access_token: "a3207b6b5ad04249ad1dbf6a98248bea",
expires_in: 3600000,
refresh_token: "4ecbbab0e9e443159c518da1d10741ad",
scope: "snsapi_base",
open_id: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}


错误返回样例:

{
"code":40029,"
msg":"invalid code",
”requestId”:”xxxx”
}

返回参数说明

参数

说明

access_token

接口调用令牌

expires_in

令牌有效时间单位秒

refresh_token

refresh_token 是用来程序方式延长 access_token 有效期, refresh_token 调用次数限制为 500/

scope

用户授权的作用域,使用逗号(,)分隔

open_id

授权用户唯一标识


五.授权常见错误及说明

返回码 提示信息 中文描述
0 SUCCESS_MESSAGE 成功
10001 PARAME_ERR_INVALID_MESSAGE 请检查您的参数是否正确
10002 SIGN_ERR_INVALID_MESSAGE 签名错误
10003 LIMIT_INVALID_MESSAGE 请求过于频繁,请稍后重试
20001 APPKEY_NOT_FIND_MESSAGE Appkey所对应的应用信息不存在
20002 APPKEY_INVALID_MESSAGE Appkey所对应的应用信息无效, 请核对信息
20003/305 REDIRECT_URL_INVALID_MESSAGE redirect_url 与应用信息设置的回调地址不同
20004 INSUFFICIENT_PERMISSIONS_MESSAGE 权限不足,请查核APPKEY是否正确
20005 CODE_INVALID_MESSAGE 权限不足,请查核APPKEY是否正确
20006/304 PIN_INVALID_MESSAGE 当前会话没有做过授权,请先授权
20007/302 APP_KEY_INVALID_MESSAGE appkey无效, 请检查app_key是否填写正确
20008 APPSECRET_INVALID_MESSAGE appsecret无效, 请检查appsecret是否填写正确
20009 USER_INVALID_MESSAGE 用户无效,请检查用户信息是否正确
20010 SESSION_TOKEN_INVALID_MESSAGE session token 失效
20011 REFRESH_TOKEN_GRANT_TYPE_INVALID_MESSAGE grant_type 值不正确, 请检查是否为 refresh_token
20012 REFRESH_TOKEN_INVALID_MESSAGE refresh_token 无效
20013 APP_KEY_DIFF_INVALID_MESSAGE app_key 与会话中的值不同, 请检查
20014 APPKEY_ERR_INVALID_MESSAGE Appkey所对应的应用信息无效
20015 CREATE_OPEN_ID__ERR_INVALID_MESSAGE 服务器繁忙, 请稍后重试
20016 GENERATE_MKEY_ERR_INVALID_MESSAGE 密钥生成失败, 请稍后重试
20017/405 MARKET_NOT_ENABLE_MESSAGE 接口返回异常
20018 RESTORE_TOKEN_ERR_INVALID_MESSAGE 保存Token到JIMDB异常
20019 AUTHORIZE_ERR_INVALID_MESSAGE 授权失败, 请稍后重试
20020 SCHEMAURL_URL_INVALID_MESSAGE redirect_url 与应用信息设置的 SchemaURL 地址不同
20025 SOURCE_INVALID_MESSAGE source 参数无效
20023 SEND_TO_MQ_ERROR_MESSAGE 系统繁忙, 请重试
20024 CANCEL_TOKEN_MESSAGE 取消授权失败
20026 USER_INFO_MESSAGE 获取用户信息失败
20027 GET_PIN_MESSAGE 获取PIN失败
20021 JOS_UNION_LOGIN_ERR_MESSAGE JOS 联合登录地址部分异常
601 JOS_PLUGIN_SIGN_INVALID_ERR_MESSAGE 访问无效,请查核APPKEY是否正确
602 JOS_PLUGIN_DECRYPTSIGN_ERR_MESSAGE 访问无效,请查核APPKEY是否正确
603 JOS_PLUGIN_DEC_VALUE_ERR_MESSAGE 访问无效,请查核APPKEY是否正确
604 JOS_PLUGIN_START_ERR_MESSAGE 访问无效,请查核APPKEY是否正确
605 JOS_PLUGIN_START_AUTH_ERR_MESSAGE 访问无效,请查核APPKEY是否正确
606 JOS_PLUGIN_REDIRECT_TO_AUTH_ERR_MESSAGE 跳转至jos插件授权页面失败
620 JOS_GRANT_TYPE_INVALID_MESSAGE grant_type 值不正确, 请检查是否为 refresh_token
621 JOS_NATIVE_AUTHORIZE_FAILED_MESSAGE jos native授权失败
622 JOS_AUTHORIZE_FAILED_MESSAGE jos授权失败
20022 OPEN_ID_INVALID_MESSAGE openId无效或openId不属于当前应用, 请检查openId是否填写正确
801 KPL_GRANT_TYPE_INVALID_MESSAGE grant_type 值不正确
1027 USER_NAME_INVALID_MESSAGE username 参数无效
1026 PASS_WORD_INVALID_MESSAGE password 参数无效
1028 GET_CODE_INVALID_MESSAGE 获取 code 失败
1002 KPL_ACCESS_SECRET_INVALID_MESSAGE 错误的秘钥,不能调用本接口
1020 KPL_ACCESS_SECRET_INVALID_MESSAGE 错误的秘钥,不能调用本接口
2020 KPL_ACCESS_SECRET_INVALID_MESSAGE 错误的秘钥,不能调用本接口
2022 KPL_PIN_EMPTY_MESSAGE 参数pin不能为空
2023 KPL_CLIENT_ID_EMPTY_MESSAGE 参数client_id不能为空
2024 KPL_REDIRECT_URL_EMPTY_MESSAGE 参数redirect_url不能为空
2028 KPL_ACCOUNT_NOT_EXIST_MESSAGE 账号不存在
2013 KPL_NOT_ENTERPRISE_ACCOUNT_MESSAGE 不是企业用户类型
2014 KPL_ACCOUNT_TYPE_NOT_SUPPORT_MESSAGE 不支持的账号类型
2018 KPL_ENTERPRISE_ACCOUNT_NOT_SUPPORT_THIS_AUTH_MESSAGE 企业用户类型不支持该方式授权
-1 KPL_ACCESS_TOKEN_NOT_EXIST_MESSAGE token不存在
-1 KPL_VALIDATE_PIN_FAILED_MESSAGE 校验pin失败
101 CHECK_LOGIN_FAILED_MESSAGE 调用验证登录信息失败
102 CHECK_PIN_AUTH_MESSAGE 验证pin:{0}的venderId:{1}不能为此类型APPKEY授权
103 PIN_AND_APPKEY_NEED_MESSAGE pin,appkey是必须的
104 SEARCH_APPKEY_ERROR_MESSAGE 查询Appkey:{0}信息失败
106 CREATE_TOKEN_FAILED_MESSAGE 生成token失败
107 WRONG_UNAUTHRIZATION_MESSAGE 容器检查登录用户不在应授权用户中
108 APPKEY_AND_PIN_TO_TOKEN_NULL_MESSAGE appkey和pin对应的token关系为空
109 APPKEY_AND_PIN_NOT_NULL_MESSAGE appkey和pin都不能为空
110 ACCESSCODE_NOT_NULL_MESSAGE accessToken 不能为空
111 DELCODE_NOT_NULL_MESSAGE delCode 不能为空
112 NO_PERMISSION_DELETE_MESSAGE 无权限删除
114 REFRESH_TOKEN_ERROR_MESSAGE refresh token失败
115 TO_LOGIN_FAILED_MESSAGE 跳转到login失败
116 TO_AUTHORIZE_FAILED_MESSAGE 跳转到授权失败