Skip to content

OAuth2

认证协议

我们支持通过 OAuth2 的授权码模式来实现用户身份认证的过程,详见 RFC6749-section-4.1

使用授权码模式,将先通过一次用户的身份认证与授权,经用户确认后方能获得 token

平台已经实现了与学校统一身份认证系统,企业微信的集成对接,并且自动根据环境判断认证方式。因此通过授权码模式对接的应用,在浏览器上访问时,将通过统一身份认证系统认证,在微信/企业微信内打开时,则将自动通过企业微信认证。一次对接即可打通两个平台。

OAuth2 Endpoints

授权码模式

该模式的授权流程为:

  1. 跳转到认证中心认证用户。
  2. 使用code获取access_token。
  3. 获取用户信息。

1、用户认证

跳转到认证中心认证用户。 请求⽅式: GET 请求地址: https://sso.ecnu.edu.cn/oauth2.0/authorize

请求参数:

https://sso.ecnu.edu.cn/oauth2.0/authorize?response_type=code&client_id=<实际的client_id>&redirect_uri=<实际的callback回调地址>&scope=ECNU-Basic

参数说明:

参数是否必须说明
response_type授权码模式,这里固定为code
client_id应用id
redirect_uri应用回调地址
scopescope ,可以不传,默认值为ECNU-Basic

返回结果:

  • 重定向到认证页面,认证成功页面将跳转至 redirect_uri?code=CODE
  • code说明:code作为换取access_token的票据,每次用户授权带上的code将不一样
  • code只能使用一次,10s未被使用自动过期。

参数说明:

参数说明
code跳转到redirect_uri时,code参数会附带在该地址中

2、用code获取access_token

使用code获取access_token。

请求⽅式: POST

请求地址: https://sso.ecnu.edu.cn/oauth2.0/accessToken

请求头(header):

Content-Type:form-data

请求参数:

获取code后,请求以下链接获取access_token

form表单post请求

http
POST https://sso.ecnu.edu.cn/oauth2.0/accessToken HTTP/1.1
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code
&client_id=<实际的client_id>
&client_secret=<实际的client_secret>
&redirect_uri=<实际的callback回调地址>
&code=<实际的拿到的code>

参数说明:

参数是否必须说明
grant_type授权码模式,这里固定为authorization_code
client_id应用id
client_secret应用秘钥
redirect_uri应用回调地址
code授权码

返回结果:

json
{
    "access_token":"AT-98-kkxRFRAp7JP4HvKcooOlTjqEslglCNoU",
    "token_type":"bearer",
    "expires_in":28800,
    "refresh_token":"RT-7-XuigbD-eb4qSN0LwHBSixvpmv4zCzw21"
}

参数说明:

参数是否必须说明
access_token访问令牌
token_type令牌类型
expires_in令牌有效期
refresh_token刷新令牌

3、获取用户信息

使用access_token获取用户信息。

请求⽅式: GET

请求地址: https://sso.ecnu.edu.cn/oauth2.0/profile

token 加在请求头中:

http
GET https://sso.ecnu.edu.cn/oauth2.0/profile HTTP/1.1
Authorization: Bearer AT-3739-S2sgta0g8YOnaaI3fND9zT37S2F9bpwb

参数说明:

参数说明
BMBM部门编码
BMMC部门名称
XGH工号
XM姓名

返回结果:

json
{
  "active": true,
  "attributes": {
    "BMBM": "0445",
    "BMMC": "信息化治理办公室",
    "objectId": "64c8abf09ae6290001326dd1",
    "XGH": "20150073",
    "XM": "冯骐"
  },
  "id": "20150073",
  "client_id": "82ad66083847afe3"
}

注销登出

登出地址为/logout。

请求⽅式: GET

请求地址: https://sso.ecnu.edu.cn/logout

当需要实现登出后重新登录,自动跳转到对接应用时,可以在登出地址后携带service参数,例如: https://sso.ecnu.edu.cn/logout?service=<实际的callback回调地址>

参数说明:

参数是否必须说明
service业务要跳转的地址

刷新令牌

描述

OAuth2 刷新令牌,详见 RFC6749-section-6

请求方法

POST

请求地址

https://sso.ecnu.edu.cn/oauth2.0/accessToken

请求参数

参数名是否必填备注
grant_type必须是 refresh_token
client_id所分配的 client_id
client_secret所分配的 client_secret
refresh_token授权码模式中,token中包含的 refresh_token

返回参数

参数名类型备注
token_typestringtoken类型
access_tokenstring获得的 token
expires_innumbertoken 的有效期
scopestring默认为 ECNU-Basic

请求示例

bash
curl -i -X POST -d "grant_type=refresh_token&client_id=dd33f4e3528c3020&client_secret=5786af1e2d1bc147328af2881a6f3f91&refresh_token=RT-15107-OSzz8MJZ-rYXccc-2Wq4Sq1Cyaal9GgB" "https://sso.ecnu.edu.cn/oauth2.0/accessToken"

返回示例

json
{
  "access_token": "AT-17234-YMkgKKbrTXgc7DLZ1TOVI7Ewozb17zsG",
  "token_type": "Bearer",
  "expires_in": 7200,
  "scope": "ECNU-Basic"
}