Skip to content

授权模式

本文所述开放授权协议指华东师范大学的 OAuth2 授权服务

我校所提供的 OAuth2 协议遵循国际标准(RFC6749),可以使用任意支持 OAuth2 开发包或开发框架进行集成开发,详情可参考 Code-OAuth

本文档的所有接口均可以在开发者平台的 OAuth2-Playground 上进行测试验证,示例所提供 curl example 均可以在任意支持 curl 的平台上运行测试。

授权码模式(authorization code)

描述

OAuth2 以授权码模式进行授权,详见 RFC6749-section-4.1

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

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

请求方法

详见 身份认证 中的详细介绍

客户端模式(client credentials)

描述

OAuth2 客户端模式进行授权,详见 RFC6749-section-4.4

请求方法

POST

请求地址

https://api.ecnu.edu.cn/oauth2/token

请求参数

参数名是否必填备注
grant_type必须是 client_credentials
client_id所分配的 client_id
client_secret所分配的 client_secret

返回参数

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

请求示例

curl -i -X POST -d "grant_type=client_credentials&client_id=*************&client_secret=****************************" "https://api.ecnu.edu.cn/oauth2/token"

返回示例

json
{"access_token":"a90509d90c2d96c9f61c2f5dfc43758c","token_type":"Bearer","expires_in":7200,"scope":"ECNU-Basic"}

资源拥有密码模式(Resource Owner Password Credentials)

描述

资源拥有密码的模式,详见 RFC6749-section-4.3

请求方法

POST

请求地址

https://api.ecnu.edu.cn/oauth2/token

请求参数

参数名是否必填备注
grant_type必须是 password
client_id所分配的 client_id
client_secret所分配的 client_secret
username用户的统一身份认证账号,即学工号
password用户的统一身份认证密码

返回参数

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

请求示例

curl -X "POST" -d 'client_id=c*****56b81&client_secret=50********678c5bf561&grant_type=password&username=20****73&password=********' "https://api.ecnu.edu.cn/oauth2/token"

返回示例

json
{"access_token":"1ed79f2cccb597408171bb717e701112","token_type":"Bearer","expires_in":7200,"scope":"ECNU-Basic","refresh_token":"3cb2f2be83bc014e6ec3617936f4d59ca729629edb7c2fd2bd9fd087e6cafe76"}

使用令牌调用接口

除了元数据字典接口,或者接口有特殊说明以外,所有接口的调用均需要携带所申请的令牌,即 access_token 才可调用成功。在接口——支持的模式中,我们列出了接口所支持的授权模式,请使用该接口所支持的模式来申请 access_token

使用 access_token 调用数据时,可以采用以下两种形式皆可。

HTTP Header 携带 token

放在 HTTP Header 的 Authorization 中,增加 Bearer为前缀,例如

curl -H "Authorization: Bearer 5956629b6715bcddad8e77516c13b183"  https://api.ecnu.edu.cn/api/v1/ecard/door/terms

以 URL 参数形式携带 token

放在 URL 中以 query string 参数形式携带,开发调试时会更方便。例如

curl  "https://api.ecnu.edu.cn/api/v1/ecard/door/terms?access_token=5956629b6715bcddad8e77516c13b183"

由于 URL 可能会被记录(浏览器,代理,服务器日志等),因此不推荐在生产环境上使用这个方式调用数据。

令牌有效期说明

access_token 有效期为 2 个小时。在 authorization codeResource Owner Password Credentials 模式下,每个用户在同一个应用下,同时最多只能拥有一个 access_token。当新的 access_token 颁发后,旧 access_token 将在 5 分钟内失效。如果您有多个应用需要通过此类模式集成,且需要持续使用 access_token 调用接口更新信息的话,请申请多个开发者账号。

client credentials 模式下可以允许同时申请多个 access_token

请求 access_token 的接口有速率限制,请在应用侧缓存 access_token,不要频繁的申请,否则可能会被临时性封禁。

尽管非常罕见,但在特殊情况下平台可能会吊销尚处于有效期内的 access_token。应用侧应该实现 access_token 失效时重新申请的策略。可以根据返回的 http header 中,X-Ca-Error-Code 的值判断,当其为 A401OT 时表示 access_token 错误。此时应用应当尝试重新申请 token。

authorization codeResource Owner Password Credentials 模式下可以通过 refresh_token 来刷新令牌,refresh_token 的有效期为 1个月。

刷新令牌

描述

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

请求方法

POST

请求地址

https://api.ecnu.edu.cn/oauth2/token

请求参数

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

返回参数

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

请求示例

curl -i -X POST -d "grant_type=refresh_token&client_id=dd33f4e3528c3020&client_secret=5786af1e2d1bc147328af2881a6f3f91&refresh_token=61b4b8a065c0104131a6657a98ad1d51dad11ec1d48ae6cd1510d337a460ed41" "https://api.ecnu.edu.cn/oauth2/token"

返回示例

{"access_token":"fc1315bffd2473d1ea59afb5683be37e","id_token":"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJkZDMzZjRlMzUyOGMzMDIwIiwiZXhwIjoxNjI0MzczMzUxLCJpYXQiOjE2MjQzNjYxNTEsImlzcyI6IkVDTlUtQmFzaWMiLCJzdWIiOiIyMDE1MDA3MyJ9.ELGRKNt0BF9SfiHIo8yCAU78cFpv_OnF8O1qSUmdb_eGKJ0TG6EVBCWYeJH_l8l98Mva21zninG3W2SZ7QURvHQWKkLXbobCr5Yw8CHs9O77qgwqgfnI_QQ8elvOSX7Dh5L88los1zS99bGZpq_NeVcQEZ-K2JXxKdPjtYtHMbZPQAwuTUuBPgED5uRE3Vw4ldS4DX9iyDjmrgbu1kntV5MNqoWi29rZ8k7TK7HvBpB8lsZ4Sou8aGnKWR6jk28pWS21ivTWU6HoYxNw7F6P0bvC9rL8u29-k3-1aEr7ES07yUNOEcLhxXr_NnofjqvX3pGQVsOvqaRvctMbXeLTBw","token_type":"Bearer","expires_in":7200,"scope":"ECNU-Basic","refresh_token":"ea9b4ce87ff4df2ef99d29195eb3de09839986fe193750886adc1350fcf9eb71"}