本文介绍京东联盟开发过程中OAuth2.0授权过程。
一、OAuth2.0定义
权威定义:OAuth is An open protocol to allow secure authorization in a simple and standard method from web, mobile and desktop applications.
OAuth是一个开放协议,允许用户让第三方应用以安全且标准的方式获取该用户在某一网站、移动或桌面应用上存储的私密的资源(如用户个人信息、照片、视频、联系人列表),而无需将用户名和密码提供给第三方应用。
OAuth 2.0是OAuth协议的下一版本,但不向后兼容OAuth 1.0。 OAuth 2.0关注客户端开发者的简易性,同时为Web应用,桌面应用和手机,和起居室设备提供专门的认证流程。
OAuth允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据。每一个令牌授权一个特定的网站(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频)。这样,OAuth允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要分享他们的访问许可或他们数据的所有内容。
新浪微博和微信中广泛使用OAuth 2.0协议。
如果要了解更多关于OAuth2.0的技术说明,请参考官方网站 https://oauth.net/2/
二、OAuth2.0配置
配置如下,在回调URL中填下要回调的地址即可。
三、接口定义
目前,京东联盟的OAuth2.0支持以下方式获取Access Token。
(1)Authorization Code
此流程要求ISV或商家(自主研发应用)有web服务器,能够保持应用本身的密钥以及状态,可以通过https直接访问京东的授权服务器。
(2)Native Application
此流程适合ISV或商家(自主研发应用)没有自己的web服务器,且应用为原生程序,即客户端应用(同时应用无法与浏览器交互,但是可以外调用浏览器)。
(3)Refresh token
通过前两种流程,获取了Access token以及Rrfresh token(刷新令牌),Access token都有一定的期限,通过服务市场授权应用,Access token期限以购买周期为准。当Access token过期时,用户可以到京东服务市场重新购买应用。
1. 获取授权码Code
接口地址
https://oauth.jd.com/oauth/authorize
获取授权码code的参数
参数名称 | 参数选项 | 描述 |
---|---|---|
response_type | 必须 | 此流程下,该值固定为code |
client_id | 必须 | 即创建应用时的Appkey(从JOS控制台->管理应用中获取) |
redirect_uri | 必须 | 即应用的回调地址,必须与创建应用时所填回调页面url一致 |
state | 可选 | 状态参数,由ISV自定义,颁发授权后会原封不动返回 |
scope | 可选 | 权限参数,API组名串。多个组名时,用","分隔,目前支持参数值:read |
view | 可选 |
移动端授权,该值固定为wap;非移动端授权,无需传值 |
2. 获取令牌Access Token
接口地址
https://oauth.jd.com/oauth/token
获取访问令牌Access token的参数
参数名称 | 参数选项 | 描述 |
---|---|---|
grant_type | 必须 | 授权类型,此流程下,该值固定为authorization_code |
code | 必须 | 授权请求返回的授权码 |
redirect_uri | 必须 | 应用的回调地址,必须与创建应用时所填回调页面url一致 |
client_id | 必须 | 即创建应用时的Appkey(从JOS控制台->管理应用中获取) |
client_secret | 必须 | 即创建应用时的Appsecret(从JOS控制台->管理应用中获取) |
state | 可选 | 状态参数,由ISV自定义,颁发授权后会原封不动返回 |
四、SDK实现与调用方法
京东联盟SDK实现代码如下所示:
其调用方法如下
五、实现效果
当访问回调地址 http://www.fangbei.org时,将引导使用应用的用户登录到如下地址
https://oauth.jd.com/oauth/authorize?response_type=code&client_id=85E279145E324CBDAC10AD6712ED01A3&redirect_uri=http://www.fangbei.org/&scope=snsapi_base&state=&view=123
页面显示如下
填写账号,密码,验证码之后,点击登录,页面将跳转到
https://oauth.jd.com/login
界面显示如下
用户同意授权,页面跳转至应用的回调地址,同时返回授权码code以及state参数。
http://www.fangbei.org/?code=uRTF98
其中将获得code信息
再根据code获得访问令牌access_token,得到信息如下
{ "access_token":"dfb44f04-1094-4bcc-99d2-d5d3f01ca20e", "code":0, "expires_in":31535999, "refresh_token":"bd7535c2-1493-4596-b3b2-efcfeff635cc", "time":"1494639358958", "token_type":"bearer", "uid":"8705417056", "user_nick":"方倍工作室" }
六、代码下载
扫描关注下方二维码,回复 “1241” 获取