鉴权方式
Aidge API 使用 HMAC-SHA256 签名进行请求鉴权。推荐使用官方 Java / Python SDK(详见SDK 参考(废弃)),SDK 自动处理签名计算。本页提供签名算法细节,供使用 CURL / Go / 其他语言自行接入时参考。
前提条件
-
拥有 Aidge API 账号,且已获取 AccessKey 和 AccessKey Secret。在 Aidge 控制台创建和查看密钥。
-
已在 Aidge 控制台激活目标 API 产品。
签名流程
1. 获取当前时间的毫秒级时间戳。
2. 拼接字符串:access_key_secret + timestamp。
3. 以 AccessKey Secret 为密钥,对拼接字符串计算 HMAC-SHA256。
4. 将计算结果转为大写十六进制字符串,即为 sign 参数值。
5. 将 sign、timestamp、app_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}×tamp={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 |
|
|
2 |
|
|
3 |
|
常见问题
|
错误信息 |
原因 |
解决方法 |
|
|
签名无效 |
检查 HMAC 计算过程,确认 Secret、时间戳和拼接顺序与上述算法一致。 |
|
|
时间戳缺失或格式错误 |
传入当前时间的毫秒级时间戳(13 位整数)。 |
注意事项
-
签名对时间敏感。客户端与服务端时钟偏差过大会导致签名被拒绝。
-
切勿在源代码中硬编码 AccessKey Secret。请存储在环境变量或密钥管理服务中。
后续步骤
-
接口概览 -- 请求和响应格式说明。
-
公共参数 -- 各 API 共享的参数说明。