Authorization Code流程

使用 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_idstring注册应用的client id值
redirect_uristring认证完成后重定向的页面,需要配置在client信息中
statestring随机字符串
scopestring用户将授权的权限范围

2. 用户在Muse的认证页面进行登录和授权

用户在该页面进行登录、授权后,将被重定向到查询参数中配置的redirect_uri,并携带查询参数code

3. 用户被重定向到应用页面

回到应用页面后,可以将code传入到应用自身的后端服务器,并换取access_token

注意,在发送POST请求时,需要指定Content-Typeapplication/x-www-form-urlencoded

同时在进行客户端认证时,使用Basic Authorization模式。basic token的值由字符串{client_id}:{client_secret}经过base64编码得到。

请求体中则需要携带coderedirect_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_idclient_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%