Open API获取鉴权
预装版通过 Open API 获取鉴权令牌,用于后续的 UI Iframe 嵌入。本文档介绍如何通过 AppKey 和 Secret 换取 accessToken,以及如何使用该令牌进行身份验证。
SDK接入流程图
流程说明:用户打开 JSSDK → 前端发起鉴权 → 服务端获取授权码 → 前端携带授权码请求 JSSDK → JSSDK 调用 API 获取数据 → 返回操作结果
开放平台账号
接入前需要准备以下信息:
接入方提供
| 内容 | 说明 |
|---|---|
| 企业名称 | 用于企业认证,需与营业执照一致 |
| 联系人信息 | 包括姓名、手机号、邮箱,用于接收重要通知 |
| 应用域名 | 用于配置域名白名单,确保 iframe 嵌入和跨域请求正常 |
| IP 白名单(可选) | 限制 API 调用来源,提升安全性 |
匠邦AI提供
| 内容 | 说明 |
|---|---|
| AppKey | 应用唯一标识,用于调用 API |
| Secret | 应用密钥,用于签名验证(仅创建时显示一次) |
| API 文档 | 完整的接口文档和示例代码 |
| 技术支持 | 专属技术支持群,协助解决接入问题 |
Secret 仅在创建应用时显示一次,请务必保存。如遗失需要重新生成,旧 Secret 将立即失效。
请求API
获取鉴权code
说明
| 接口地址 | POST https://api.jbangai.com/open/v1/auth/code |
|---|---|
| Content-Type | application/json |
| 功能说明 | 使用 AppKey 和 Secret 获取鉴权 code,有效期 5 分钟 |
请求参数
| 参数名 | 类型 | 是否必传 | 参数说明 |
|---|---|---|---|
| appKey | string | 是 | 应用 Key,在控制台获取 |
| secret | string | 是 | 应用密钥,在控制台获取 |
| timestamp | long | 是 | 当前时间戳(毫秒),用于防重放攻击 |
| nonce | string | 是 | 随机字符串,用于防重放攻击 |
请求头
| 参数名 | 类型 | 是否必传 | 参数说明 |
|---|---|---|---|
| Content-Type | string | 是 | 固定值:application/json |
| X-Request-Id | string | 否 | 请求唯一标识,用于问题排查 |
请求示例
curl -X POST https://api.jbangai.com/open/v1/auth/code \
-H "Content-Type: application/json" \
-d '{
"appKey": "your_app_key",
"secret": "your_secret",
"timestamp": 1678886400000,
"nonce": "abc123xyz"
}'
const axios = require('axios');
const response = await axios.post('https://api.jbangai.com/open/v1/auth/code', {
appKey: 'your_app_key',
secret: 'your_secret',
timestamp: Date.now(),
nonce: Math.random().toString(36).slice(2)
}, {
headers: { 'Content-Type': 'application/json' }
});
console.log(response.data);
import requests
import time
import random
import string
response = requests.post(
'https://api.jbangai.com/open/v1/auth/code',
json={
'appKey': 'your_app_key',
'secret': 'your_secret',
'timestamp': int(time.time() * 1000),
'nonce': ''.join(random.choices(string.ascii_letters, k=10))
},
headers={ 'Content-Type': 'application/json' }
)
print(response.json())
返回参数
| 参数名 | 类型 | 说明 |
|---|---|---|
| code | int | 状态码,200 表示成功 |
| message | string | 返回消息 |
| data.authCode | string | 鉴权 code,用于换取 accessToken |
| data.expiresIn | int | 有效期(秒),默认 300 秒 |
响应示例
{
"code": 200,
"message": "success",
"data": {
"authCode": "auth_abc123def456ghi789",
"expiresIn": 300
}
}
使用code换取accessToken
说明
| 接口地址 | POST https://api.jbangai.com/open/v1/auth/token |
|---|---|
| Content-Type | application/json |
| 功能说明 | 使用鉴权 code 换取 accessToken,用于后续业务 API 调用 |
请求参数
| 参数名 | 类型 | 是否必传 | 参数说明 |
|---|---|---|---|
| authCode | string | 是 | 上一步获取的鉴权 code |
返回参数
| 参数名 | 类型 | 说明 |
|---|---|---|
| code | int | 状态码,200 表示成功 |
| message | string | 返回消息 |
| data.accessToken | string | 访问令牌,用于调用业务 API |
| data.expiresIn | int | 有效期(秒),默认 7200 秒 |
| data.tokenType | string | 令牌类型,固定值 Bearer |
响应示例
{
"code": 200,
"message": "success",
"data": {
"accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"expiresIn": 7200,
"tokenType": "Bearer"
}
}
accessToken 默认有效期 7200 秒(2小时)。建议在服务端缓存并在到期前刷新,避免频繁调用鉴权接口。
完整使用示例
以下是从获取 code 到使用 accessToken 的完整流程示例:
const axios = require('axios');
async function getAccessToken(appKey, secret) {
// 步骤1: 获取鉴权code
const codeResponse = await axios.post('https://api.jbangai.com/open/v1/auth/code', {
appKey: appKey,
secret: secret,
timestamp: Date.now(),
nonce: Math.random().toString(36).slice(2)
});
const authCode = codeResponse.data.data.authCode;
// 步骤2: 使用code换取accessToken
const tokenResponse = await axios.post('https://api.jbangai.com/open/v1/auth/token', {
authCode: authCode
});
return tokenResponse.data.data.accessToken;
}
// 使用示例
getAccessToken('your_app_key', 'your_secret')
.then(token => console.log('Access Token:', token))
.catch(error => console.error('Error:', error));