最近更新时间:2025-11-18 10:38:10
签名的目的在于校验请求的真实性和完整性。签名生成过程分为三个步骤:
构造规范化请求字符串 → 计算签名 → 将签名加入请求参数。
建议使用AWS签名
将所有请求参数(业务参数 + 公共参数)进行字典序排序,
注意:不参与排序的唯一参数是 Signature 本身。
排序规则:
按参数名(key)进行 ASCII 字典序升序排列。
所有参数名和参数值必须使用 UTF-8 编码,并按 RFC 3986 规则进行 URL 编码。
编码规则如下:
下列字符 不编码:A–Z a–z 0–9 - _ . ~
其他字符编码为 %XY 格式(大写 16 进制)。
不同语言生成 RFC3986 编码方式提示:
语言 | 建议编码方式 | 额外处理 |
|---|---|---|
Java |
| 将 |
Golang |
| 将 |
PHP |
| 已符合 RFC3986,无需额外处理 |
Python 3 |
| 需指定 |
编码后的参数按以下格式拼接:
key1=value1&key2=value2&key3=value3拼接规则:
每个键值对:encoded_key=encoded_value
键值对之间用 & 连接
最终得到规范化请求字符串:
CanonicalizedQueryString
使用以下公式计算签名:
sign = HMAC-SHA256( CanonicalizedQueryString , SK )说明:
SK 为 AccessKey 对应的 SecretKey
输出格式为 小写十六进制字符串
示例签名:
5346bfebeb3f2162e2459e09a52b640584e5f1aa5012b15c6b85388680d4663e计算得到的 sign 即为最终的签名值,将其作为:
Signature = sign添加到请求参数中(GET 放在 query,POST 放在 body)。
纯净模式
