鉴权方式

更新时间:
复制为 MD 格式

Aidge API 使用 HMAC-SHA256 签名进行请求鉴权。推荐使用官方 Java / Python SDK(详见SDK 参考(废弃)),SDK 自动处理签名计算。本页提供签名算法细节,供使用 CURL / Go / 其他语言自行接入时参考。

前提条件

  • 拥有 Aidge API 账号,且已获取 AccessKeyAccessKey Secret。在 Aidge 控制台创建和查看密钥。

  • 已在 Aidge 控制台激活目标 API 产品。

签名流程

1. 获取当前时间的毫秒级时间戳。

2. 拼接字符串:access_key_secret + timestamp

3. 以 AccessKey Secret 为密钥,对拼接字符串计算 HMAC-SHA256。

4. 将计算结果转为大写十六进制字符串,即为 sign 参数值。

5. 将 signtimestampapp_key 作为查询参数拼入请求 URL。

代码示例

关于 make_signed_request:本文档体系里各 SKU 的"快速开始"示例使用 make_signed_request(api_name, data) 作为简化伪代码,等价于"完成 HMAC-SHA256 签名 + 拼 query + POST + 解析 JSON 响应"。实际接入请使用官方 SDK(推荐 Java / Python,SDK 自动处理签名),或使用以下任一语言的完整签名实现自行封装。

Python

import os
import time
import hashlib
import hmac
import requests

access_key_name = os.environ["AIDGE_KEY_NAME"]
access_key_secret = os.environ["AIDGE_KEY_SECRET"]

api_domain = "cn-api.aidc-ai.com"  # 国际站使用 "api.aidc-ai.com"
api_name = "/ai/text/marco/translator"

def make_signed_request(api_name, data):
    timestamp = str(int(time.time() * 1000))

    # 计算 HMAC-SHA256 签名
    sign_string = access_key_secret + timestamp
    sign = hmac.new(
        access_key_secret.encode("utf-8"),
        sign_string.encode("utf-8"),
        hashlib.sha256,
    ).hexdigest().upper()

    url = (
        f"https://{api_domain}/rest{api_name}"
        f"?partner_id=aidge&sign_method=sha256&sign_ver=v2"
        f"&app_key={access_key_name}&timestamp={timestamp}&sign={sign}"
    )

    headers = {"Content-Type": "application/json"}
    response = requests.post(url, data=data, headers=headers)
    return response.json()

Java

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;

public class AidgeSigner {

    public static String computeSign(String accessKeySecret, String timestamp) {
        try {
            SecretKeySpec keySpec = new SecretKeySpec(
                accessKeySecret.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
            Mac mac = Mac.getInstance("HmacSHA256");
            mac.init(keySpec);
            byte[] hash = mac.doFinal(
                (accessKeySecret + timestamp).getBytes(StandardCharsets.UTF_8));
            StringBuilder sb = new StringBuilder();
            for (byte b : hash) {
                sb.append(String.format("%02X", b & 0xFF));
            }
            return sb.toString();
        } catch (Exception e) {
            throw new RuntimeException("签名计算失败", e);
        }
    }
}

Go

package main

import (
    "crypto/hmac"
    "crypto/sha256"
    "encoding/hex"
    "fmt"
    "strings"
    "time"
)

func computeSign(accessKeySecret string) (sign string, timestamp string) {
    ts := fmt.Sprintf("%d", time.Now().UnixNano()/int64(time.Millisecond))
    h := hmac.New(sha256.New, []byte(accessKeySecret))
    h.Write([]byte(accessKeySecret + ts))
    return strings.ToUpper(hex.EncodeToString(h.Sum(nil))), ts
}

签名算法汇总

步骤

操作

1

timestamp = 当前毫秒级时间戳(如 1714000000000

2

sign_string = access_key_secret + timestamp(字符串拼接)

3

sign = HMAC-SHA256(sign_string, access_key_secret),转为大写十六进制

常见问题

错误信息

原因

解决方法

The request signature does not conform to platform standards

签名无效

检查 HMAC 计算过程,确认 Secret、时间戳和拼接顺序与上述算法一致。

The timestamp is invalid or malformed

时间戳缺失或格式错误

传入当前时间的毫秒级时间戳(13 位整数)。

注意事项

  • 签名对时间敏感。客户端与服务端时钟偏差过大会导致签名被拒绝。

  • 切勿在源代码中硬编码 AccessKey Secret。请存储在环境变量或密钥管理服务中。

后续步骤

  • 接口概览 -- 请求和响应格式说明。

  • 公共参数 -- 各 API 共享的参数说明。