全部文档
当前文档

暂无内容

如果没有找到您期望的内容,请尝试其他搜索词

文档中心

签名机制

最近更新时间:2025-11-18 10:38:10

签名的目的在于校验请求的真实性和完整性。签名生成过程分为三个步骤:
构造规范化请求字符串 → 计算签名 → 将签名加入请求参数

建议使用AWS签名

1. 构造规范化请求字符串(CanonicalizedQueryString)

步骤 1:请求参数排序

将所有请求参数(业务参数 + 公共参数)进行字典序排序,
注意:不参与排序的唯一参数是 Signature 本身。

排序规则:

  • 按参数名(key)进行 ASCII 字典序升序排列。


步骤 2:请求参数编码(RFC 3986)

所有参数名和参数值必须使用 UTF-8 编码,并按 RFC 3986 规则进行 URL 编码。

编码规则如下:

  • 下列字符 不编码
    A–Z a–z 0–9 - _ . ~

  • 其他字符编码为 %XY 格式(大写 16 进制)。

不同语言生成 RFC3986 编码方式提示:

语言

建议编码方式

额外处理

Java

java.net.URLEncoder.encode()

+%20*%2A%7E~

Golang

url.Values.Encode()

+%20

PHP

rawurlencode()

已符合 RFC3986,无需额外处理

Python 3

urllib.request.quote(str, '~')

需指定 ~ 不编码


步骤 3:拼接 CanonicalizedQueryString

编码后的参数按以下格式拼接:

key1=value1&key2=value2&key3=value3

拼接规则:

  • 每个键值对:encoded_key=encoded_value

  • 键值对之间用 & 连接

最终得到规范化请求字符串:
CanonicalizedQueryString


2. 计算签名(Signature)

使用以下公式计算签名:

sign = HMAC-SHA256( CanonicalizedQueryString , SK )

说明:

  • SK 为 AccessKey 对应的 SecretKey

  • 输出格式为 小写十六进制字符串

示例签名:

5346bfebeb3f2162e2459e09a52b640584e5f1aa5012b15c6b85388680d4663e

3. 将签名添加到请求参数中

计算得到的 sign 即为最终的签名值,将其作为:

Signature = sign

添加到请求参数中(GET 放在 query,POST 放在 body)。

文档导读
纯净模式常规模式

纯净模式

点击可全屏预览文档内容
文档反馈