You need to enable JavaScript to run this app.
文档中心
对象存储

对象存储

复制全文
下载 pdf
Header 中包含签名
单分块上传的签名机制
复制全文
下载 pdf
单分块上传的签名机制
本文介绍使用单分块上传时的 TOS V4 签名计算过程、签名示例等内容。​
签名所需函数​
​
函数名称​
描述​
UriEncode()​
对字符串进行编码,编码限制如下:​
  • 除了 A~Z、a ~ z、0~9、-、.、_、~ 字符,其他字符都需要编码。​
  • 空格需要编码为 %20(不支持编码为 +)。​
  • 每个 URI 编码字节由 % 和两位十六进制数组成。十六进制值必须是大写。​
  • 除了对象名中的 / 无需编码,其他情况下 / 都需要编码。​
Lowercase()​
将字符串转换成小写。​
Hex()​
16 进制编码。​
SHA256Hash()​
SHA256 算法。​
HMAC-SHA256()​
HmacSHA256 算法。​
Trim()​
删除字符串开头和结尾的空白符。​
​
签名计算过程​
您可以在 HTTP 请求中增加 Authorization 的 Header 来包含签名信息。​
步骤 1:构造规范化请求 (CanonicalRequest)​
说明​
  • Hash 代指 SHA256 算法。​
  • HexEncode 代指转 16 进制编码。​
​
CanonicalRequest = ​
HTTPMethod + '\n' + ​
CanonicalURI + '\n' + ​
CanonicalQueryString + '\n' + ​
CanonicalHeaders + '\n' + ​
SignedHeaders + '\n' + ​
HashedPayload​
​
参数说明如下。​
​
参数​
描述​
HTTPMethod​
HTTP 请求的 Method,如 PUT、GET、HEAD、DELETE 等。​
CanonicalURI​
UriEncode(<PATH>)​
  • 如果 URL 中的 PATH 为空,则 CanonicalURI为/。​
  • 如果完整路径为 [https://bucketname.tos-cn-beijing.volces.com/object](https://bucketname.tos-cn-beijing.volces.com/object),则 CanonicalURI 为 /object。​
CanonicalQueryString​
请求中 Query 参数的编码格式:​
UriEncode(<QueryParam1>) + '=' + UriEncode(<value>) + '&' + UriEncode(<QueryParam2>) + '=' + UriEncode(<value>) + '&' +​
...​
UriEncode(<QueryParamN>) + '=' + UriEncode(<value>)​
说明​
  • 请求中的 Query 参数编码后按照 ASCII 字节顺序进行上述格式处理。​
  • 所有 Query 参数必须参与计算。​
  • 如果没有 Query 参数,则 CanonicalQueryString 为空字符串。​
CanonicalHeaders​
请求中 Header 的编码格式:​
Lowercase(<HeaderName1>) + ':' + Trim(<value>) + '\n'​
Lowercase(<HeaderName2>) + ':' + Trim(<value>) + '\n'​
...​
Lowercase(<HeaderNameN>) +':' + Trim(<value>) + '\n'​
说明​
  • HeaderName 按字典序排列。​
  • CanonicalHeaders 无需包含全部头域。​
  • 如果请求中存在 Content-Type 头域,则 CanonicalHeaders 必须包含该头域。​
  • CanonicalHeaders 必须包含 host 头域。​
  • 使用临时 AK/SK 鉴权时,必须携带 x-tos-security-token,CanonicalHeaders 必须包含该头域。​
  • CanonicalHeaders 必须包含所有 x-tos-* 的头域。​
SignedHeaders​
列出用于计算签名的 Header :​
Lowercase(<HeaderName1>) + ';' + Lowercase(<HeaderName2>) + ... + Lowercase(<HeaderNameN>)​
说明​
  • CanonicalHeaders 中的 HeaderName 按字典序排列。​
  • SignedHeaders 里的 HeaderName 必须在请求的头域中。​
HashedPayload​
Hex(SHA256Hash(<payload>),表示请求中 payload 进行 SHA256 计算后的 16 进制。​
说明​
  • 如果请求中没有 payload,则计算空字符串 Hex(SHA256Hash("")),该值为 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855。​
  • 预签名的情况下,可以不计算 payload,使用 UNSIGNED-PAYLOAD 代替。​
​
步骤 2:创建签名字符串 (StringToSign)​
签名字符串主要包含请求以及正规化请求的元数据信息,由签名算法、请求日期、信任状和正规化请求哈希值连接组成,伪代码如下:​
​
StringToSign = Algorithm + '\n' + RequestDate + '\n' + CredentialScope + '\n' + HexEncode(Hash(CanonicalRequest))​
​
参数说明如下。​
​
参数​
说明​
Algorithm​
签名的算法,目前仅支持 HMAC-SHA256 的签名算法。​
RequestDate​
请求 UTC 时间,请使用如下格式:yyyyMMddTHHmmssZ。​
CredentialScope​
凭证范围值,格式为:yyyyMMdd/region/tos/request。​
CanonicalRequest​
上一小节正规化请求的结果。​
​
步骤 3:计算签名秘钥(SigningKey)​
在计算签名前,首先从私有访问密钥(Secret AccessKey)派生出签名密钥(SigningKey),而不是直接使用私有访问密钥。具体计算过程如下:​
​
kSecret = *Your Secret Access Key*​
kDate = HMAC-SHA256(kSecret, Date)​
kRegion = HMAC-SHA256(kDate, Region)​
kService = HMAC-SHA256(kRegion, "tos")​
kSigning = HMAC-SHA256(kService, "request")​
​
步骤 4:计算签名​
​
Signature = HexEncode(HMAC-SHA256(kSigning, StringToSign))​
​
步骤 5:构建 Authorization Header​
​
Authorization: TOS4-HMAC-SHA256 Credential={AccessKeyId}/{CredentialScope},SignedHeaders={SignedHeaders}, Signature={Signature}​
​
表达式中 {} 部分表示上文计算的中间过程。​
签名示例​
以下载对象为例,相关信息如下。​
​
参数​
值​
桶名​
examplebucket​
对象名​
exampleobject​
区域​
cn-beijing​
时间​
Sat, 1 Jan 2022 00:00:00 GMT​
AccessKeyId​
testAK​
SecretAccessKey​
testSK​
​
步骤 1:构造规范化请求 (CanonicalRequest)​
​
GET​
/exampleobject​
​
host:examplebucket.tos-cn-beijing.volces.com​
x-tos-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855​
x-tos-date:20220101T000000Z​
​
host;x-tos-content-sha256;x-tos-date​
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855​
​
步骤 2:创建签名字符串 (StringToSign)​
​
TOS4-HMAC-SHA256​
20220101T000000Z​
20220101/cn-beijing/tos/request​
c5b4f2fac36f0a3351d91753998bd811d1c446c186a2b3fb2b9e420630f13534​
​
步骤 3:计算签名秘钥(SigningKey)​
​
HMAC-SHA256(HMAC-SHA256(HMAC-SHA256(HMAC-SHA256("testSK", "20220101"), "cn-beijing"), "tos"), "request")​
​
步骤 4:计算签名​
​
d40b66cf0054d1642843670d10fa095e1609c7896f25df217770b0abe717693b​
​
步骤 5:构建 Authorization Header​
​
TOS4-HMAC-SHA256 Credential=testAK/20220101/cn-beijing/tos/request,SignedHeaders=host;x-tos-content-sha256;x-tos-date, Signature=d40b66cf0054d1642843670d10fa095e1609c7896f25df217770b0abe717693b​
​
签名方式​
​
最近更新时间:2025.07.24 11:28:59
这个页面对您有帮助吗?
有用
有用
无用
无用