Skip to main content

OAuth 2.0

OAuth 2.0 是一个行业标准的授权协议,用于授权第三方应用访问用户资源。平台支持标准的 OAuth 2.0 授权码模式(Authorization Code Flow),适用于 Web 应用、移动应用等多种场景。

概述​

适用场景​

  • 需要安全访问平台用户数据
  • 需要以用户身份调用平台接口
  • 需要实现单点登录(SSO)
  • 需要与第三方系统进行安全集成

OAuth 2.0 授权码流程​

接入流程​

1. 前置准备​

在开始接入之前,需要在平台创建 OAuth 客户端:

  1. 登录平台,进入 开发管理 > 开发设置 > OAuth 客户端
  2. 点击 新增 按钮创建客户端
  3. 获取 Client ID 和 Client Secret

详细步骤请参考各子页面中的说明。

2. 接入步骤​

OAuth 2.0 接入分为三个主要步骤:

步骤说明文档链接
构造授权链接引导用户访问授权链接,发起授权请求构造网页授权链接
获取访问令牌使用授权码换取访问令牌获取访问令牌
获取用户信息使用访问令牌获取用户信息获取用户信息

3. 接口说明​

接口方法说明
/connect/oauth2/authorizeGET授权页面
/api/OAuth2/TokenPOST获取访问令牌
/api/OAuth2/UserInfoGET获取用户信息

快速开始​

第一步:构造授权链接​

// 构造授权链接
const authUrl = `${platformUrl}/connect/oauth2/authorize?` +
`client_id=${clientId}&` +
`redirect_uri=${redirectUri}&` +
`response_type=code&` +
`scope=basic&` +
`state=${randomState}`;

// 跳转到授权页面
window.location.href = authUrl;

第二步:处理回调并获取令牌​

// 从回调 URL 中获取 code
const code = new URLSearchParams(window.location.search).get('code');

// 使用 code 换取访问令牌
const tokenResponse = await fetch(
`${platformUrl}/api/OAuth2/Token`,
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Tenant-Id': tenantId
},
body: JSON.stringify({
client_id: clientId,
secret: clientSecret,
code: code
})
}
);

const { access_token } = await tokenResponse.json();

第三步:获取用户信息​

// 使用访问令牌获取用户信息
const userInfoResponse = await fetch(
`${platformUrl}/api/OAuth2/UserInfo`,
{
headers: {
'Authorization': `Bearer ${access_token}`,
'Content-Type': 'application/json'
}
}
);

const userInfo = await userInfoResponse.json();
console.log('用户信息:', userInfo);

完整示例​

查看各子页面中的详细代码示例:

安全建议​

  1. 妥善保管 Client Secret

    • 不要在客户端代码中暴露
    • 使用环境变量存储敏感信息
  2. 使用 state 参数

    • 每次请求生成不同的随机 state
    • 在回调时验证 state 的合法性
  3. 使用 HTTPS

    • 生产环境必须使用 HTTPS
    • 防止参数被劫持
  4. 令牌管理

    • 妥善存储访问令牌
    • 在令牌过期时重新授权

相关链接​