Auth2.0 登陆授权

1.1Authorization Code验证授权模式



 

1.Resource Server(资源服务器):负责存放服务提供商的用户数据资源等相关信息。当第三方应用访问这个资源服务器时,需要提供Access Token否则会提示访问失败。所以我们最终的目的就是让第三方Web应用顺利地访问到服务提供商的资源服务器。

2.Authorization Server(验证授权服务器):负责验证用户账户名密码,以及给第三方WEB应用发放Access Token。

 

1.1.1Oauth2.0授权过程


授权过程分为三个步骤:

(1) 通过用户授权获取授权码Code; (获取授权码 : https://member.yhd.com/login/authorize.do

(2) 用上一步获取的Code和应用密钥(AppSecret)通过Https Post方式换取Token。 (获取访问令牌: (https://member.yhd.com/login/token.do)

(3)用上一步的refreshToken来延长accessToken使用周期并换取新的accessToken(即sessionKey)(刷新口令使用时间:https://member.yhd.com/login/refreshToken.do

 

1.1.2参数说明

1.1.2.1 获取授权码参数 

参数名字 参数选项 参数值 参数释义
client_id 必选   等同与appkey
response_type 必选 code  
redirect_uri 必选   授权成功或失败后重定向URL地址
scope 可选   保留字段
state 可选   维持应用的状态,传入值与返回值保持一致
view 可选 默认为web 保留字段

1.1.2.2返回值说明     

参数名字 参数选项 参数释义
code 正常结果 授权码
error 异常时返回 错误码
error_description 异常时返回 错误描述

 

1.1.2.3获取访问令牌参数 

参数名字 参数选项 参数值 参数释义
client_id 必选   appkey的值
client_secret 必选   appsecret
grant_type 必选 authorization_code  
code 必选   授权码
redirect_uri 必选   获取token失败时,重定向URL地址
scope 可选   保留字段
state 可选   维持应用的状态,传入值与返回值保持一致。
view 可选 默认为web 保留字段

1.1.2.4获取访问令牌的返回值以json格式返回

key 类型 选项 示例 说明
accessToken string 必选 2YotnFZFEjr1zCsicMWpAA AccessToken即sessionkey

expiresIn

number 可选 1371177282761

Access token到期时间,以毫秒计算(new Date()).getTime()

如果为空,则表示按次购买的应用,无过期时间

refreshToken String     刷新token
refreshExpiresIn number   1371177282761 refreshToken到期时间,以毫秒计算(new Date()).getTime()
userId Integer 必选 12345 用户ID
nickName string 必选 测试test 账户名称
userCode String 必选 test 账户编码
userType

Integer

必选 1231231 用户类型(1:商家、2:商家子账号、3:供应商、4:运营、5:商必赢供应商)
merchantId Integer 必选 706388888 商家对应id
supplierId Integer 必选 1231231 供应商对应id
isvId Integer 必选 1231231 SBY账号对应id

示例:

{"accessToken":"4351da806756ccbb92erra2670f111","merchantId":52807,"nickName":"商必赢006","refreshExpiresIn":1470903294000,
"refreshToken":"c414d50d119ace2e50c097e87c885a","userCode":"sbyisvtest006","userId":85146,"userType":1}

1.1.2.4 刷新口令使用时间参数(https://member.yhd.com/login/refreshToken.do

公告说明(http://open.yhd.com/opendoc.do?categoryId=165)

参数名

参数选项

参数值

参数解释

client_id

必选

 

 

client_secret

必选

 

 

grant_type

必选

refresh_token

 

refresh_token

必选

 

 

scope

可选

 

 

state

可选

 

 

view

可选

 

 

 

返回参数:

参数名

类型

说明

accessToken

String

 

refreshToken

String

 

expiresIn

Number

Access token到期时间,以毫秒计算(new Date()).getTime()

 

messageCode

String

成功“success”;其他都视为失败

message

 

 

refreshExpiresIn

 

 

messageCode可能出现的值:

 

messageCode返回值

说明

 

 

success

成功

 

 

refreshtoken _empty

refreshtoken为空

 

 

refreshtoken_expire

刷新token失效

 

 

refreshtoken_not_exist

刷新token不存在

 

 

clientid_not_exist

clientid不存在

 

 

clientid_empty

clientid为空

 

 

clientsecret_empty

clientsecret 为空

 

 

clientsecret _not_exist

clientsecret不存在

 

 

application_not_exist

client_id(即appkey)对应的应用不存在

 

 

accesstoken_not_found

对应的accessToken不存在,请确认该用户是否订购或者授权了该应用

 

 

other_error

失败,系统内部错误,请稍后再试

 

 

1.1.3 应用示例

1.1.3.1请求授权用户登录

https://member.yhd.com/login/authorize.do?client_id=10420013042300000266&response_type=code&redirect_uri=http%3A%2F%2Fmember.yhd.com%2FtestOauth%2FtestAuthorizeResult.do&scope=&state=&view=

1.1.3.2请求授权用户授权(用户登录后) 


1.1.3.3获取授权码

出现授权页面后,用户可以选择“授权“ 或 ”取消“。

若用户选择“取消“,则页面跳转至应用的回调地址,同时返回如下错误信息:

error=authorize_reject

error_description=authorize reject

若用户选择“授权“,则页面跳转至应用的回调地址,同时返回授权码code以及state参数。


 

1.1.3.4获取访问令牌

对于应用程序,可以参考如下代码获取访问令牌:

Map<String, String> param = new HashMap<String, String>();

param.put(“grant_type”, "authorization_code");

param.put(“code”, 授权码);

param.put(“client_id”, appKey);

param.put(“client_secret”, appSecret);

param.put(“redirect_uri”, redirect_uri);

param.put(“scope”, “item”);

param.put(“view”, “web”);

param.put(“state”, state);

String responseJson=WebUtils.doPost(tbPostSessionUrl, param, 3000, 3000);

 

然后把responseJson 转化为对象,或者直接从里面提取:access_token字段。

返回结果内容示例:

 {"accessToken":"f64eac11f2cd8f0efa196f8ad173178e","expiresIn":1370534399000,"isvId":4,"merchantId":9865,"nickName":"sby","userCode":"sbytest01","userId":33073,"userType":1}

1.1.3.5刷新&延长访问令牌

Map<String, String> param = new HashMap<String, String>();

param.put(“grant_type”, "refresh_token");

param.put(“refresh_token”, refreshToken);

param.put(“client_id”, appKey);

param.put(“client_secret”, appSecret);

String responseJson=WebUtils.doPost(tbPostSessionUrl, param, 3000, 3000);

然后把responseJson 转化为对象,或者直接从里面提取:新的access_token和expiresIn字段。

 

 

1.1.4  测试地址

1.1.4.1获取用户的授权码

https://member.yhd.com/testOauth/testAuthorize.do




 

测试用的Redirect URI可以填写为:https://member.yhd.com/testOauth/testAuthorizeResult.do

实际应用填写自己的Redirect URI地址。

1.1.4.2登陆页面

如果用户没有登陆,则会先进入登陆页面,提示用户进行登陆。




 

1.1.4.3授权页面

确认授权页,用户需要点击确认才能授权。


1.1.4.4获取用户的授权Code




 

1.1.4.5用授权Code获取access Token

测试地址:https://member.yhd.com/testOauth/testToken.do




 

测试用的Redirect URI可以填写为:https://member.yhd.com/testOauth/testAuthorizeResult.do

实际应用填写自己的Redirect URI地址。

1.1.4.6获取AccessToken

{"accessToken":"a3eb043e7bf775de87763e9f8121c953","expiresIn":1397577599000,"merchantId":303,"nickName":"王慧测试专用店铺-啦啦啦啦","userCode":"52sport","userId":7813,"userType":1}




 

1.1.5 退出流程

(1)    访问https://member.yhd.com/login/logoff.do

(2)    需要的参数如下:

名称 是否必须 描述
client_id 即创建应用时的Appkey
redirect_uri

应用的回调地址,必须和应用的callback主域名匹配。

 

 

 

提示

关闭