在OSS中,使用HTTP请求的Authorization Header来携带签名信息是进行身份验证的最常见方法。除了使用POST签名和URL签名之外,所有的OSS操作都需要通过Authorization Header来进行身份验证。本文介绍如何使用V4签名算法来在Header中包含签名。
SDK签名实现
OSS SDK已实现自动完成V4签名。推荐采用OSS SDK的方式发起请求,可以免去手动签名的过程。如果您想了解具体语言的V4签名实现,请参考OSS SDK的代码。OSS SDK签名实现的文件请参见下表。
SDK | 签名实现 |
Java | |
PHP | |
Node.js | |
Browser.js | |
Python | |
Go | |
C++ | |
C |
Authorization计算方法
Authorization
字段以空格的形式分隔签名版本和签名信息。
Authorization字段 | 说明 |
签名版本 | 仅支持填写OSS4-HMAC-SHA256。 |
签名信息 | 以键值对(key=value)的形式呈现。键值对之间用逗号分隔,键与值之间用等号连接。其中,签名信息支持的key包括两个必选字段(
|
格式
Authorization: "OSS4-HMAC-SHA256 Credential=" + AccessKeyId + "/" + SignDate + "/" + SignRegion + "/oss/aliyun_v4_request, " + [ "AdditionalHeaders=" + AdditionalHeadersVal + ", " ] + "Signature=" + SignatureVal
示例
Authorization: OSS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20231203/cn-hangzhou/oss/aliyun_v4_request, AdditionalHeaders=host;userdefine, Signature=34b48302e7b5fa45bde8084f4b7868a86f0a534bc59db6670ed5711ef69dc6f7
通过STS服务获取的临时访问凭证发送请求时,您还需要将获得的security-token值以x-oss-security-token:security-token
的形式加入到请求头中。关于如何获取Security-Token的具体操作,请参见AssumeRole - 获取扮演角色的临时身份凭证。
签名计算流程
步骤1:构造CanonicalRequest
步骤2:构造待签名字符串(StringToSign)
步骤3:计算Signature
签名计算示例
以PutObject为例,演示如何在Header包含V4签名。
计算示例参数说明
参数
值
AccessKeyId
accesskeyid
AccessKeySecret
accesskeysecret
Timestamp
20231203T121212Z
Bucket
examplebucket
Object
exampleobject
Region
cn-hangzhou
PutObject
PUT /exampleobject HTTP/1.1 Content-MD5: eB5eJF1ptWaXm4bijSPyxw Content-Type: text/html Date: Sun, 03 Dec 2023 12:12:12 GMT Host: examplebucket.oss-cn-hangzhou.aliyuncs.com Authorization: SignatureToBeCalculated x-oss-date: 20231203T121212Z x-oss-meta-author: alice x-oss-meta-magic: abracadabra x-oss-content-sha256: UNSIGNED-PAYLOAD
在Header包含V4签名的步骤如下:
构造CanonicalRequest。
PUT /examplebucket/exampleobject content-md5:eB5eJF1ptWaXm4bijSPyxw content-type:text/html host:examplebucket.oss-cn-hangzhou.aliyuncs.com x-oss-content-sha256:UNSIGNED-PAYLOAD x-oss-date:20231203T121212Z x-oss-meta-author:alice x-oss-meta-magic:abracadabra host UNSIGNED-PAYLOAD
构造待签名字符串(StringToSign)。
OSS4-HMAC-SHA256 20231203T121212Z 20231203/cn-hangzhou/oss/aliyun_v4_request 129b14df88496f434606e999e35dee010ea1cecfd3ddc378e5ed4989609c1db3
计算签名。
计算SigningKey。
说明为方便可读,如下为SigningKey经Base64编码后的字符串。
WVjaYR8lCj9YC5PUS2RSZQANYbuh9DhMFxjU1NtZKfc=
计算Signature。
4b663e424d2db9967401ff6ce1c86f8c83cabd77d9908475239d9110642c63fa
将签名添加到Authorization中。
OSS4-HMAC-SHA256 Credential=accesskeyid/20231203/cn-hangzhou/oss/aliyun_v4_request,AdditionalHeaders=host,Signature=4b663e424d2db9967401ff6ce1c86f8c83cabd77d9908475239d9110642c63fa
- 本页导读 (1)