一、认证流程
平台基于OAuth 2.0授权流程具体授权流程如下:
用户访问客户端,客户端通过用户代理向认证服务器请求授权码
用户同意授权
认证服务器通过用户代理返回授权码给客户端
客户端携带授权码向认证服务器请求访问令牌(token)
认证服务器返回访问令牌
通过访问令牌获取用户信息
二、概念介绍
appKey和appSecret
appKey:应用的唯一标识。在OAuth2.0认证过程中,appKey的值即为oauth_consumer_key的值。
appSecret:appKey对应的密钥,访问用户资源时用来验证应用的合法性,在OAuth2.0认证过程中,appSecret的值即为oauth_consumer_secret的值。
code
即临时令牌。当用户在平台访问应用前,需对应用进行授权,用户授权后,应用方可访问用户的隐私数据。用户在完成授权之后,会跳转到redirect_uri,并带上临时令牌code。
code为一次性令牌,有效期为5分钟。
access_token
在获得code后,通过调用平台后台接口来获取access_token。
redirectUri
应用对应的回调地址,在OAuth2.0认证中会对回调地址和应用地址进行校验。
三、认证接口
1、统一认证接口
基本信息
接口名称:统一认证接口
接口说明:应用发起授权到认证中心认证
请求地址:${BASEURL}/login/oAuthLogin.html
请求类型:GET
接口版本:1.0
修改日期:2023-11-21
请求参数
响应参数名称 | 响应参数类型 | 是否有值 | 说明 |
---|---|---|---|
grant_type | String | 是 | 授权模式,固定传authorization_code |
response_type | String | 是 | 返回类型,固定传code |
appkey | String | 是 | 平台唯一标识 |
state | String | 是 | 客户端填写随机串 |
redirect_uri | String | 是 | 回调地址,需要URL编码 |
响应结果
跳转到回调地址并带上code:https://your_redirect_uri?code=xxxx
2、获取授权令牌接口
基本信息
接口名称:获取token接口
接口说明:根据code换取token令牌信息
请求地址:${BASEURL}/loginserv/oauth/connect/token
请求方式:POST
请求类型:application/x-www-form-urlencoded
接口版本:1.0
修改日期:2023-11-21
请求参数
参数名 | 数据类型 | 是否必填 | 说明 |
---|---|---|---|
code | String | 是 | 由认证中心颁发的code,使用一次即销毁,有效期5分钟 |
grant_type | String | 是 | 授权模式,固定传authorization_code |
appKey | String | 是 | 平台唯一标识 |
appSecret | String | 是 | 平台唯一密钥 |
响应结果
{
"code": 0,
"status": "success",
"result": {
"access_token": "u6QRG05UgJkNHUYMn4zgh6R1dPNMBpTdvDI0jfEV5Ssgjxzc6g8WTYZlpAYj",
"refresh_token": "l6C7Yqcl21oJ4HgxKHjvE1oQosuLZZN6PPEEelN9zLiTB4UYh6mNho1XK5gN",
"expires_in": 300
}
}
3、刷新令牌信息
基本信息
接口名称:刷新令牌信息
接口说明:通过refresh_token获取access_token
请求地址:${BASEURL}/loginserv/oauth/refresh
请求方式:POST
请求类型:application/x-www-form-urlencoded
接口版本:1.0
修改日期:2023-11-21
请求参数
参数名 | 数据类型 | 是否必填 | 说明 |
---|---|---|---|
grant_type | String | 是 | 授权模式,固定传refresh_token |
appKey | String | 是 | 平台唯一标识 |
appSecret | String | 是 | 平台唯一密钥 |
refresh_token | String | 是 | 刷新token |
响应结果
{
"code": 0,
"status": "success",
"result": {
"access_token": "LB27efvoV2qbeJyCWcqBYvQw19yQ7sl8ssy8CwRtQMSeRyNupq19AYpnVIpT",
"refresh_token": "Do8npNQAJWKEg3gQ8ECs8wZ0j71cBGNuv0DHn1ArqY6Lo2ThE9LiR9ZKFKT9",
"expires_in": 300
}
}
4、获取用户信息
基本信息
接口名称:刷新令牌信息
接口说明:通过refresh_token获取access_token
请求地址:${BASEURL}/loginserv/oauth/userinfo
请求方式:GET
请求头:Authorization={access_token}
接口版本:1.0
修改日期:2023-11-21
请求接口权限,两种方式皆可:
1、Headers设置为Authorization={access_token}
2、API接口地址添加${BASEURL}?access_token={access_token}
请求参数
参数名 | 数据类型 | 是否必填 | 说明 |
---|---|---|---|
access_token | String | 是 | 访问令牌 |
响应结果
参数名 | 类型 | 约束 | 描述 |
---|---|---|---|
userName | String | 必须 | 用户账号 |
userID | Long | 必须 | 用户主键 |
gender | String | 非必须 | 性别:男、女 |
cellPhone | String | 非必须 | 手机号码 |
name | String | 必须 | 用户姓名 |
schoolID | String | 必须 | 学校编码 |
schoolName | String | 必须 | 学校名称 |
roles | String | 必须 | 用户角色,角色信息参照附录 |
教师返回结果
{
"code": 0,
"status": "success",
"result": {
"code": "0",
"userInfo": {
"userName": "15410170002",
"userID": "LUNiqCx+bTE4iAnG+UUi55A==",
"gender": -1,
"cellPhone": "15410170002",
"name": "老师2",
"schoolID": "C69M7f/iDwqNeWb701Dkng==",
"schoolName": "懂你升级学校7",
"roles": "SchoolAdmin"
},
"message": "获取成功"
}
}
学生返回结果
{
"code": 0,
"status": "success",
"result": {
"code": "0",
"userInfo": {
"userName": "10170001",
"userID": "Ld0C8tjAHFDOLHgFOIJmOGg==",
"gender": 1,
"cellPhone": "15610170001",
"name": "等哈1",
"gradeID": "1012023",
"gradeName": "高一",
"classID": "1",
"className": "1班",
"schoolID": "C69M7f/iDwqNeWb701Dkng==",
"schoolName": "懂你升级学校7",
"roles": "Student",
"extraField1": "",
"extraField2": "",
"extraField3": "10170001"
},
"message": "获取成功"
}
}