使用 Authorization Code 流程进行认证
Muse的OAuth服务支持标准的Authorization Code流程。
整个流程分为三个步骤:
- 用户被重定向到Muse的认证页面(携带client_id, redirect_uri, state等信息)
- 用户在Muse的认证页面进行登录和授权
- 用户被重定向到应用页面(通过传入的
redirect配置),根据携带的code可以从Muse的认证服务器获得access_token
流程
1. 用户被重定向到Muse的认证页面
GET https://musedam.cc/oauth2| 查询参数 | 类型 | 描述 |
|---|---|---|
| client_id | string | 注册应用的client id值 |
| redirect_uri | string | 认证完成后重定向的页面,需要配置在client信息中 |
| state | string | 随机字符串 |
| scope | string | 用户将授权的权限范围 |
2. 用户在Muse的认证页面进行登录和授权
用户在该页面进行登录、授权后,将被重定向到查询参数中配置的redirect_uri,并携带查询参数code。
3. 用户被重定向到应用页面
回到应用页面后,可以将code传入到应用自身的后端服务器,并换取access_token。
注意,在发送POST请求时,需要指定Content-Type为application/x-www-form-urlencoded。
同时在进行客户端认证时,使用Basic Authorization模式。basic token的值由字符串{client_id}:{client_secret}经过base64编码得到。
请求体中则需要携带code和redirect_uri信息。
Authorization: Basic AUTHORIZATION_CODE
POST https://open.musedam.cc/open-api/authority/auth/token请求示例:
curl -X POST \
'https://open.musedam.cc/open-api/authority/auth/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'Authorization: Basic %AUTHORIZATION_TOKEN%' \
--data-urlencode 'code=%CODE%' \
--data-urlencode 'redirect_uri=%SOME_REDIRECT_URI%'请求成功后,将获得如下的json格式数据:
{
"scope": "SOME_SCOPE",
"access_token": "SOME_TOKEN",
"refresh_token": "ANOTHER_TOKEN"
}4. 使用refresh_token更新凭证
在access_token失效后,可用refresh_token获取新的token。token更新与token获取采用类似的请求结构,也通过client_id和client_secret构建Authorization头,只是请求地址不同。
请求体中只需要携带refresh_token字段。
Authorization: Basic AUTHORIZATION_CODE
POST https://open.musedam.cc/open-api/authority/auth/refresh请求示例:
curl -X POST \
'https://open.musedam.cc/open-api/authority/auth/refresh' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'Authorization: Basic %AUTHORIZATION_TOKEN%' \
--data-urlencode 'refresh_token=%REFRESH_TOKEN%'更新成功后,将获得如下格式的json格式数据:
{
"scope": "SOME_SCOPE",
"access_token": "SOME_TOKEN",
"refresh_token": "ANOTHER_TOKEN"
}5. 使用access_token访问开放接口
在请求中将Authorization Header设置为Bearer {access_token},即可正常访问开放接口。
请求示例:
curl -X GET \
'https://open.musedam.cc/open-api/example' \
--header 'Authorization: Bearer %ACCESS_TOKEN%