3.3.1 认证中心模式
考虑到安全问题,认证中心所提供的 OAuth2.0 协议仅提供 Authorization Code 模式,并且不提供 refresh_token.
Authorization Code模式
认证步骤概述
Authorization Code模式用于应用使用EAC进行用户认证的场景,其具体认证步骤如下:
- 引导用户进入认证中心认证页面进行认证,用户通过认证后认证中心将给予用户授权code到回传地址;
- 通过用户授权code换取access_token
- 通过access_token获取用户基本信息
认证接口
引导用户进入认证中心认证页面
认证中心认证请求页面地址:
参数提交方式:GET
参数说明
凡例:
参数名: 约束条件
参数说明
参数样例
client_id: 必有参数
上海教育认证中心给予的应用id,一般为八位随机码
RscG5Arm
redirect_uri: 必有参数
认证完成后的回调地址,即认证完成后认证中西会将用户引导到这个地址,并且以GET形式给予code授权码
state: 可选参数
回传参数,提交的值将在认证完成后返回code时原样返回
scope: 可选参数
请求的code的授权范围,EAC的scope由EAC管理员控制,建议不提交此参数或填写BASE
BASE
grant_type: 可选参数
授权模式,默认值为authorization_code,建议不提交此参数或填写authorization_code
authorization_code
完整的地址样例:
https://oauth.cloud.sh.edu.cn?client_id=RscG5Arm&redirect_uri=http://www.abc.com
或
https://oauth.cloud.sh.edu.cn?client_id=RscG5Arm&redirect_uri=http://www.abc.com&state=abc123&scope=BASE&grant_type=authorization_code
认证完成后认证中心将用户引导到回调地址样例:
http://www.abc.com?code=code5236602f5d174f268078bf680ea12770&state=abc123
通过用户授权code换取access_token
接口页面地址:
https://oauth.cloud.sh.edu.cn/oauth/GetAccessToken
参数提交方式:GET
参数说明
client_id: 必有参数
上海教育认证中心给予的应用id,一般为八位随机码
RscG5Arm
code: 必有参数
用户通过认证后认证中心给予的用户授权code,使用一次立即失效
code5236602f5d174f268078bf680ea12770
client_secret: 必有参数
上海教育认证中心给予的应用secret
1STkFBC1Y5xEde2Y
scope: 可选参数
请求的code的授权范围,EAC的scope由EAC管理员控制,建议不提交此参数或填写BASE
BASE
grant_type:可选参数
授权模式,默认值为authorization_code,建议不提交此参数或填写authorization_code
authorization_code
完整的地址样例:
https://oauth.cloud.sh.edu.cn/oauth/GetAccessToken?client_id=RscG5Arm&code=code5236602f5d174f268078bf680ea12770&client_secret=1STkFBC1Y5xEde2Y
或
https://oauth.cloud.sh.edu.cn/oauth/GetAccessToken?client_id=RscG5Arm&code=code5236602f5d174f268078bf680ea12770&client_secret=1STkFBC1Y5xEde2Y&scope=BASE&grant_type=authorization_code
返回参数:
返回参数为json型字符串,定义如下
type:
操作结果码,1为成功,其余皆为失败
1
access_token:
可用于获取用户信息的令牌,获取token成功时有此参数
808db567cd84bd49cc3ac5e3f2901da
expires_in:
token有效期,秒数,获取token成功时有此参数
7200
message:
错误信息,type不等于1时有此参数
code失效
返回值样例:
{"type":0," message":"code失效"}
或
{"type":1,"access_token":"access808db567cd84bd49cc3ac5e3f2901da","expires_in":"7200"}
通过access_token获取用户基本信息
接口页面地址:
https://oauth.cloud.sh.edu.cn/oauth/GetUserInfo
参数提交方式:GET
参数说明
access_token: 必有参数
上一节获取到的access_token
808db567cd84bd49cc3ac5e3f2901da
完整的地址样例:
https://oauth.cloud.sh.edu.cn/oauth/GetUserInfo?access_token=access808db567cd84bd49cc3ac5e3f2901da
返回参数:
返回参数为json型字符串,定义如下
type:
操作结果码,1为成功,其余皆为失败
1
user:
登录用户的对象信息,属性如下:
UID:用户ID,由子域方决定的唯一标识,大部分学校为学号、工号、卡号,基础教育子域为UUID
XM:用户姓名
RYLX:人员类型,即“学生”或“教师”
ZYM:子域名,子域单位的长域名
ZYMC:子域名城,子域单位的中文名称
message:
错误信息,type不等于1时有此参数
code失效
返回值样例
{"type":0,"message":"提供的令牌已过期或已销毁"}
或
{"type":1,
"user":{"UID":"100012345","XM":"张三","RYLX":"教师" ,"ZYM":”shnu.edu.cn”,”ZYMC”:”上海师范大学” }}
补充说明
Scope
EAC OAuth服务的scope由EAC控制,应用方无需再请求时附加该参数,获取到的token访问范围按EAC后台设置的scope为准。
Refresh_token
为解决子域用户生命周期结束的问题,EAC OAuth服务不提供Refresh Token刷新令牌,即当 Access Token过期后,应用必须重新引导用户进行认证,才可获取新的Access Token,以此来保障当用户身份已在IDP中过期,不会发生OAuth中Token还能继续使用的问题。