首页 > 开发文档 > 用户授权介绍

用户授权介绍

登录授权

    如果您的应用和京东开放平台对接时需要获取用户隐私数据(如商品、订单等),为保证用户数据的安全与隐私,您的应用需要取得用户的授权,即获取访问用户数据的授权令牌 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

用户刷新access_token

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

用户刷新access_token

scope

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

open_id

授权用户唯一标识