OAuth2.0授权码模式接口文档
1. 对接说明
观远BI系统支持使用授权码模式进行OAuth2.0对接,此文档用于对接或者评估认证/授权中心的接口是否满足要求。接口设计满足OAuth2.0标准协议。
1.1. 流程示意图

2. 获取授权码(Authorization Code)
请求
请求方式:GET 
接口地址:可在BI上配置
Content-Type: application/x-www-form-urlencoded
| 参数 | 是否必传 | 描述 | 
| response_type | 是 | 授权类型,此处为 "code"。 | 
| client_id | 是 | 您应用程序的客户端 ID。 | 
| redirect_uri | 否 | 授权服务器将用户重定向到的 URI。仅当BI系统中配置了“回调地址”才会有,是否需要此参数取决于授权系统,一般配置为BI域名 + /standard-oauth2/authenticate。 | 
| state | 是 | 用于防止跨站请求伪造(CSRF)的随机字符串。 | 
GET /{authorize_url}?response_type=code&client_id={client_id}&redirect_uri={redirect_uri}&state={state}
- 如有其他固定参数,可在url上配置。
响应
如果用户同意授权,授权服务器将重定向到 redirect_uri,并在 URL 查询参数中附加授权码(code)和您传递的 state。
{redirect_uri}?code={authorization_code}&state={state}
- 特别注意state必须原样返回。有较多的OAuth2.0系统,都无此参数,或者不会原值返回。
3. 通过授权码(Authorization Code)获取访问令牌(Access Token)
请求方式:POST 
接口地址:可在BI上配置
Content-Type: application/x-www-form-urlencoded
请求
| 参数 | 是否必传 | 描述 | 
| grant_type | 是 | 授权类型,此处为 "authorization_code"。 | 
| code | 是 | 获取到的授权码。 | 
| redirect_uri | 否 | 授权服务器将用户重定向到的 URI。与获取授权码时的 URI 相同,仅当BI系统中配置了“回调地址”才会有,是否需要此参数取决于授权系统,一般配置为BI域名 + /standard-oauth2/authenticate。 | 
| client_id | 是 | 应用程序的客户端 ID。 | 
| client_secret | 是 | 应用程序的客户端密钥。 | 
grant_type=authorization_code&code={authorization_code}&redirect_uri={redirect_uri}&client_id={client_id}&client_secret={client_secret}
- 如有其他固定参数,可联系观远同事配置。
响应
Content-Type: application/json;charset=UTF-8
| 参数 | 是否必须 | 描述 | 
| access_token | 是 | 用于访问受保护资源的访问令牌。 | 
| token_type | 否 | 令牌类型。 | 
| expires_in | 否 | 访问令牌的有效期(秒)。 | 
| refresh_token | 否 | 用于在访问令牌过期后获取新访问令牌的刷新令牌。 | 
{
  "access_token": "{access_token}",
  "token_type": "Bearer",
  "expires_in": 3600,
  "refresh_token": "{refresh_token}"
}
4. 获取用户信息
- 
不属于标准协议内的接口 
- 
BI支持请求方法、url、请求头、请求体等灵活配置 
- 
支持从响应数据中解析用户唯一标识字段 
5. 单点登出
- 可以配置登出重定向
6. 常见问题
6.1. 常见接口不匹配的情况
- 
获取授权码、获取access token两个接口的请求方式、Content-Type、参数名称不匹配。着重注意: - 
获取授权码接口的回调接口,是否有state参数 
- 
获取access token的接口响应格式,access_token是否在json的第一层 
- 
获取acceess token的请求Content-Type为application/x-www-form-urlencoded,而不是application/json 
 
-