Appearance
🔐OAuth PKCE 接入指南
概述
在移动设备、本地应用、单页应用等公开客户端场景下,PKCE(Proof Key for Code Exchange)协议可有效防止授权码被拦截滥用。本指南详细介绍如何在YOO-AI平台实现PKCE授权流程。
准备工作
创建OAuth应用
接入前,请在韦尼克平台完成以下操作:
注册登录韦尼克平台,完成企业认证
创建一个SaaS应用(智能PPT)
配置对应的安全域名(即嵌入平台的域名)
准备前端或后端服务,用户处理授权回调和令牌交换流程
授权流程图
接入步骤
步骤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:请求令牌
- 收到请求后,YOO-AI OAuth Server 将对以下三个参数进行对比验证。
- 原始的随机值 code_verifier
- 临时密钥 code_challenge
- 验证通过后,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"
}