获取鉴权
说明
采用 AK(api key)/SK(secret key) 签名认证, 开通 API账号得到 AK、SK
AK/SK 签名认证流程
构造规范请求
: 将待发送的请求内容按照与API服务端约定的规则组装,确保客户端签名、API服务端认证时使用的请求内容一致。创建待签字符串
: 使用规范请求和其他信息创建待签字符串。计算签名
: 使用AK/SK和待签字符串计算签名。信息上传
: 将生成的签名信息作为请求消息头添加到 HTTP 请求中。
1.构造规范请求
使用AK/SK方式进行签名与认证,首先需要规范请求内容,然后再进行签名。客户端与API服务端使用相同的请求规范,可以确保同一个HTTP请求的前后端得到相同的签名结果,从而完成身份校验。
- HttpRequestMethod:HTTP 请求方法,如 GET、POST。
- ApiUri:请求资源路径,以 "/" 开头,并以 "/" 结尾,如果URI路径不以 "/" 结尾,则在尾部添加 "/" 如:/api/grant/code 需要变为 /api/grant/code/
- Timestamp: 请求的时间戳,单位秒。
2.创建待签字符串
伪代码: 各个参数之间用 "@" 隔开 stringToSign = HttpRequestMethod + "@" + ApiUri + "@" + Timestamp。
- 示例(token): stringToSign = GET@/api/grant/token/@1696821929
- 示例(code): stringToSign = GET@/api/grant/code/@1696821929
3.计算签名
使用SK
和创建好的待签字符串
进行Hmac sha1 计算得到签名值 ,然后再做 base64_encode,计算得到最终签名值。
nodeJS示例
ts
import CryptoJS from 'crypto-js'
let currentSeconds = Math.floor(new Date().getTime() / 1000)
let codeBody = 'GET@/api/grant/code/@' + currentSeconds
let tokenBody = 'GET@/api/grant/token/@' + currentSeconds
// 使用HMAC-SHA1算法进行加密
// 调用code 后续使用预装版使用此hash值
const hash = CryptoJS.HmacSHA1(codeBody, apiSecret)
// 调用token 后续使用拼装版使用此hash值
const hash = CryptoJS.HmacSHA1(tokenBody, apiSecret)
// 将加密结果输出为Base64编码
const base64Encoded = CryptoJS.enc.Base64.stringify(hash)
let headers = {
'x-api-key': apiKey,
'x-timestamp': currentSeconds,
'x-signature': base64Encoded
}
Java示例
java
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class Main {
private static final String HMAC_SHA1_ALGORITHM = "HmacSHA1";
public static void main(String[] args) throws Exception {
String sk = "";
// 调用code 后续使用预装版使用此方法
// String data = "GET@/api/grant/code/@请求的时间戳,单位秒";
String data = "GET@/api/grant/code/@1710418026";
// 调用token 后续使用拼装版使用此方法
// String data = "GET@/api/grant/token/@请求的时间戳,单位秒";
String data = "GET@/api/grant/token/@1710418026";
String signature = genHmac(data, sk);
System.out.println("HMAC-SHA1 (Base64): " + signature);
}
private static String genHmac(String data, String key) throws Exception {
SecretKeySpec signingKey = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), HMAC_SHA1_ALGORITHM);
Mac mac = Mac.getInstance(HMAC_SHA1_ALGORITHM);
mac.init(signingKey);
byte[] rawHmac = mac.doFinal(data.getBytes(StandardCharsets.UTF_8));
return Base64.getEncoder().encodeToString(rawHmac);
}
}
获取认证TOKEN
业务流程图
描述
接口描述 | token有效期目前是30天,建议接入方服务端缓存并跟踪 x-token 的过期时间并及时更新,避免频繁调用。 token 颗粒度是用户级别的,即:接入方下的每一个用户的 x-token 都不同。 | ||
接口地址 | /api/grant/token | 请求方式 | GET |
权限校验 | 是 | 请求参数 | json |
请求参数
请求示例
ts
curl --location 'https://co.aippt.cn/api/grant/token?uid=1&channel=' \
--header 'x-api-key: {{apiKey}}' \
--header 'x-timestamp: 1696821929' \
--header 'x-signature: Uf1UYWp45y0deQ9/eS1CCDQXqJ8='
响应内容
响应示例
ts
{
"code": 0,
"data": {
"api_key": "xxxx",
"uid": "123",
"token": "xxxx",
"time_expire": 2592000
},
"msg": "ok"
}
获取认证Code
业务流程图
描述
接口描述 | 第三方用户在前端打开Iframe时,需要通过第三方服务端调用AIPPT API接口申请访问的授权码(x-code)。第三方拿到授权码(x-code)后,需要把授权码(x-code)传入 AIPPT JSSDK | ||
接口地址 | /api/grant/code | 请求方式 | GET |
权限校验 | 是 | 请求参数 | json |
请求参数
请求示例
ts
curl --location 'https://co.aippt.cn/api/grant/code?uid=1&type=&channel=' \
--header 'x-api-key: {{apiKey}}' \
--header 'x-timestamp: 1696821929' \
--header 'x-signature: S52ihSWntQ317tSIR4EEfGLL9FY=' \
响应内容
响应示例
{
"code": 0,
"data": {
"api_key": "api_key",
"uid": "1",
"code": "429738a59f91d6977843fd1c893bc66b",
"time_expire": 86400
},
"msg": "ok"
}
【注意】身份认证
AiPPT 所有的开放 API 都需要在请求的HTTP Headers
传入x-api-key
与x-token
带入您的身份 Token 信息,用于完成认证。