最近更新时间:2025-11-18 10:38:10
建议使用AWS签名
请求参数包括业务参数和公共参数(不包含 Signature),示例原始参数如下:
{
"Accesskey": "AKLTXQVF0pOmS6aahIrD5r0B3Q",
"Service": "iam",
"Action": "CreateUser",
"Version": "2015-11-01",
"Timestamp": "2021-08-12T02:47:36Z",
"SignatureVersion": "1.0",
"SignatureMethod": "HMAC-SHA256",
"UserName": "Ttest",
"RealName": "周四测试",
"Email": "zsce@kkingsoft.com",
"Remark": "~ce shi*%#|+"
}{
"Accesskey": "AKLTXQVF0pOmS6aahIrD5r0B3Q",
"Action": "CreateUser",
"Email": "zsce@kkingsoft.com",
"RealName": "周四测试",
"Remark": "~ce shi*%#|+",
"Service": "iam",
"SignatureMethod": "HMAC-SHA256",
"SignatureVersion": "1.0",
"Timestamp": "2021-08-12T02:47:36Z",
"UserName": "Ttest",
"Version": "2015-11-01"
}{
"Accesskey": "AKLTXQVF0pOmS6aahIrD5r0B3Q",
"Action": "CreateUser",
"Email": "zsce%40kkingsoft.com",
"RealName": "%E5%91%A8%E5%9B%9B%E6%B5%8B%E8%AF%95",
"Remark": "~ce%20shi%2A%25%23%7C%2B",
"Service": "iam",
"SignatureMethod": "HMAC-SHA256",
"SignatureVersion": "1.0",
"Timestamp": "2021-08-12T02%3A47%3A36Z",
"UserName": "Ttest",
"Version": "2015-11-01"
}Accesskey=AKLTXQVF0pOmS6aahIrD5r0B3Q&
Action=CreateUser&
Email=zsce%40kkingsoft.com&
RealName=%E5%91%A8%E5%9B%9B%E6%B5%8B%E8%AF%95&
Remark=~ce%20shi%2A%25%23%7C%2B&
Service=iam&
SignatureMethod=HMAC-SHA256&
SignatureVersion=1.0&
Timestamp=2021-08-12T02%3A47%3A36Z&
UserName=Ttest&
Version=2015-11-01SecretKey(SK):
OMovU5PTLh6y9E9Ioe3K411jt99VqyQSBXgAcDYlo49R3lvUIzb6e/efZCFDmtFlzw==签名计算方式:
package main
import (
"crypto/hmac"
"crypto/sha256"
"encoding/hex"
"fmt"
)
func main() {
canonicalized := "Accesskey=xxx&Action=xxx..." // CanonicalizedQueryString
secretKey := "sk"
h := hmac.New(sha256.New, []byte(secretKey))
h.Write([]byte(canonicalized))
sign := hex.EncodeToString(h.Sum(nil))
fmt.Println(sign) // 小写 hex
}import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
public class SignExample {
public static void main(String[] args) throws Exception {
String canonicalized = "Accesskey=xxx&Action=xxx..."; // CanonicalizedQueryString
String secretKey = "sk";
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(new SecretKeySpec(secretKey.getBytes(StandardCharsets.UTF_8), "HmacSHA256"));
byte[] hash = mac.doFinal(canonicalized.getBytes(StandardCharsets.UTF_8));
// 转为小写 hex
StringBuilder sb = new StringBuilder();
for (byte b : hash) {
sb.append(String.format("%02x", b));
}
System.out.println(sb.toString());
}
}$canonicalized = "Accesskey=xxx&Action=xxx..."; // CanonicalizedQueryString
$sk = "sk";
$sign = hash_hmac('sha256', $canonicalized, $sk);
echo $sign; // 小写 heximport hmac
import hashlib
canonicalized = "Accesskey=xxx&Action=xxx..." # CanonicalizedQueryString
secret_key = "sk"
sign = hmac.new(
secret_key.encode("utf-8"),
canonicalized.encode("utf-8"),
hashlib.sha256
).hexdigest()
print(sign) # 小写 hex签名结果:
fc9088ab845949dac4040be9b7ce7859068b5c21d4c400fec8ee0cefb777f659最终请求示例(POST + application/x-www-form-urlencoded):
curl -s -L -X POST 'iam.api.ksyun.com' \
-H 'Accept: application/json' \
-H 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'Accesskey=AKLTXQVF0pOmS6aahIrD5r0B3Q' \
--data-urlencode 'Service=iam' \
--data-urlencode 'Action=CreateUser' \
--data-urlencode 'Version=2015-11-01' \
--data-urlencode 'Timestamp=2021-08-12T02:47:36Z' \
--data-urlencode 'SignatureVersion=1.0' \
--data-urlencode 'SignatureMethod=HMAC-SHA256' \
--data-urlencode 'UserName=Ttest' \
--data-urlencode 'RealName=周四测试' \
--data-urlencode 'Email=zsce@kkingsoft.com' \
--data-urlencode 'Remark=~ce shi*%#|+' \
--data-urlencode 'Signature=fc9088ab845949dac4040be9b7ce7859068b5c21d4c400fec8ee0cefb777f659'
纯净模式