Skip to content

获取鉴权

说明

采用 AK(api key)/SK(secret key) 签名认证, 开通 API账号得到 AK、SK

AK/SK 签名认证流程

  1. 构造规范请求: 将待发送的请求内容按照与API服务端约定的规则组装,确保客户端签名、API服务端认证时使用的请求内容一致。
  2. 创建待签字符串: 使用规范请求和其他信息创建待签字符串。
  3. 计算签名: 使用AK/SK和待签字符串计算签名。
  4. 信息上传: 将生成的签名信息作为请求消息头添加到 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-keyx-token 带入您的身份 Token 信息,用于完成认证。

参数说明

状态码