授权模式
本文所述开放授权协议指华东师范大学的 OAuth2 授权服务
我校所提供的 OAuth2 协议遵循国际标准(RFC6749),可以使用任意支持 OAuth2 开发包或开发框架进行集成开发,详情可参考 Code-OAuth
本文档的所有接口均可以在开发者平台的 OAuth2-Playground 上进行测试验证,示例所提供 curl example 均可以在任意支持 curl 的平台上运行测试。
授权码模式(authorization code)
描述
OAuth2 以授权码模式进行授权,详见 RFC6749-section-4.1
此模式通常用于实现单点登录对接。
请求方法
详见 身份认证 中的详细介绍
客户端模式(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_type | string | token类型 |
| access_token | string | 获得的 token |
| expires_in | number | token 的有效期 |
| scope | string | 默认为 ECNU-Basci |
请求示例
curl -i -X POST -d "grant_type=client_credentials&client_id=*************&client_secret=****************************" "https://api.ecnu.edu.cn/oauth2/token"返回示例
{"access_token":"a90509d90c2d96c9f61c2f5dfc43758c","token_type":"Bearer","expires_in":7200,"scope":"ECNU-Basic"}使用令牌调用接口
除了元数据字典接口,或者接口有特殊说明以外,所有接口的调用均需要携带所申请的令牌,即 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 code 和 Resource 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 code 和 Resource 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_type | string | token类型 |
| access_token | string | 获得的 token |
| id_token | string | jwt 的 id token |
| expires_in | number | token 的有效期 |
| scope | string | 默认为 ECNU-Basic |
| refresh_toklen | string | refresh 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"}