2 鉴权与签名算法
2.1 鉴权参数
属性 | 类型 | 约束 | 描述 | 举例说明 |
---|---|---|---|---|
appkey | string | 必填 | 应用ID, 厂商分配 | |
nonce | string | 必填 | 随机字符串,自定义字符串 | uincall |
timestamp | string | 必填 | 时间戳,格式为unix整数时间戳,精确到秒 | 如:1603123200 |
signature | string | 必填 | 签名 |
鉴权参数包含在http路由查询参数中,示例如下:
/api/v1/aicall/task/save?appkey=[appkey]&nonce=[nonce]×tamp=[timestamp]&signature=[signature]
2.2 签名算法
signature (数据签名)计算方法:
1) 将appkey、nonce、timestamp等参数和其值,形成key=val格式字符串组;
2) 基于key升序排序,中间拼接&字符,形成字符串:
appkey=[appkey]&nonce=[nonce]×tamp=[timestamp];
3) 用HMAC-SHA256签名算法进行签名, 其中签名密钥appsecret由厂商分配。
2.3 代码参考
java签名算法参考:
public static String Signature(String appsecret, String strToSign){
// 创建 HMAC-SHA256 算法实例
Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
SecretKeySpec secret_key = new SecretKeySpec(appsecret.getBytes(), "HmacSHA256");
// 初始化 HMAC 实例
sha256_HMAC.init(secret_key);
// 计算 HMAC 的值
byte[] hash = sha256_HMAC.doFinal(strToSign.getBytes());
// 将结果编码为 Base64 字符串
return Base64.getEncoder().encodeToString(hash);
}
go签名算法参考:
func Signature(appsecret, strToSign string) (result string) {
sha256 := sha256.New
hash := hmac.New(sha256, []byte(appsecret))
hash.Write([]byte(strToSign))
return base64.StdEncoding.EncodeToString(hash.Sum(nil))
}
python签名算法参考
def sign_hmac_sha256(key, message):
# 将key和message转换为字节类型
key = key.encode('utf-8')
message = message.encode('utf-8')
# 将key和message转换为字节类型
h = hmac.new(key, message, hashlib.sha256)
# 获取哈希的十六进制表示形式,并进行base64编码
return base64.b64encode(h.digest()).decode('utf-8')
php签名算法参考:
function signature($appsecret, $strToSign) {
$hash = hash_hmac('sha256', $strToSign, $appsecret, true);
return base64_encode($hash);
}
验证参数:
appsecret = ‘4bwrpl2m7mgysn1ayhqw’
msg = ‘appkey=appk&nonce=robot×tamp=1721971207’
使用上面参数进行测试,得出加密后的参数如下,则算法正确
加密后的signature:OQccDUOGi/51rB3AqJDCFmkQW34Xr4YSB9LpKCMWws8=
文档更新时间: 2024-10-25 10:34 作者:admin