Skip to content

🔐OAuth PKCE 接入指南

概述

在移动设备、本地应用、单页应用等公开客户端场景下,PKCE(Proof Key for Code Exchange)协议可有效防止授权码被拦截滥用。本指南详细介绍如何在YOO-AI平台实现PKCE授权流程。

准备工作

创建OAuth应用

  1. 接入前,请在韦尼克平台完成以下操作:

    1. 注册登录韦尼克平台,完成企业认证

    2. 创建一个SaaS应用(智能PPT)

    3. 配置对应的安全域名(即嵌入平台的域名)

    4. 准备前端或后端服务,用户处理授权回调和令牌交换流程

授权流程图

接入步骤

步骤1:发起授权请求

1:生成密钥对

创建code_verifier : 客户端生成一个随机值 code_verifier,并根据指定算法将其转换为 code_challenge。其中转换算法为 code_challenge_method,转换通常使用 SHA-256 算法,并进行 Base64URL 编码,即 code_challenge = BASE64URL-ENCODE(SHA256( ASCII(code_verifier)))。

javascript
// 生成code_verifier(43-128字符)
const code_verifier = generateRandomString(64); 

// 计算code_challenge(S256算法)
const code_challenge = base64url(
  sha256(code_verifier)
);

2:应用程序重定向用户到授权服务器

应用程序通过 302 重定向方式发起 获取授权页面 URL API 请求。请求中携带 OAuth 应用的客户端 ID、重定向 URL、临时密钥 code_challenge、转换算法 code_challenge_method 等信息。

请求示例

shell
curl --location --request GET 'https://saas.api.yoo-ai.com/oauth/authorize?response_type=code&app_id=8173420653665306615182245269&redirect_uri=https://www.yoo-ai.com/oauth/apps&state=1294848&code_challenge=*****&scope=SCOPE'

步骤2:获取授权码

YOO-AI OAuth Server 在重定向的响应中(URL为保存授权域名)返回授权码 code。 从重定向的 URL 地址中获取 code,例如本示例中 code 为WZmPRDcjJhfwHD****。

shell
https://www.yoo-ai.com/oauth/apps?code=WZmPRDcjJhfwHD****&state=1294848

步骤3:请求令牌

应用程序向YOO-AI服务端发起 获取 OAuth Access Token 请求,请求中携带授权码 code 和临时密钥转换前的原始随机值code_verifier。

请求示例

shell
curl --location 'https://saas.api.yoo-ai.com/oauth/token' \
--header 'Content-Type: application/json' \
--data '{
    "code": "WZmPRDcjJhfwHD****",
    "expire_date": 1750491362,
    "app_id": "9767336922475223578182683125",
    "code_verifier": "9767****",
    "union_id":"tk84441"
}'

步骤4:请求令牌

  1. 收到请求后,YOO-AI OAuth Server 将对以下三个参数进行对比验证。
    • 原始的随机值 code_verifier
    • 临时密钥 code_challenge
  2. 验证通过后,YOO-AI OAuth Server 将通过 获取 OAuth Access Token API 响应的方式颁发令牌。 其中: access_token 即访问令牌,用于发起 API 请求时鉴权,有效期为设定时长。 refresh_token 用于刷新 access_token,有效期为 30 天。refresh_token 到期前可以多次调用 刷新Access Token 接口获取新的 refresh_token 和 access_token。
json
{
   "app_id": "0274560981",
   "access_key_id": "IzYwSX31Z9iEnhsaQpMcA0TfO4BlKdHx",
   "access_token": "bDPzJkJ63K5m5gBkBt3Ypumc8kZMkCRg",
   "refresh_token": "rjWD9fHJ5YxFcVVzXgHf6v4t4bftFuKS",
   "expire_date": 1750326609,
   "union_id": "5YnJestvva"
}

相关文档

API参考文档