对请求进行身份验证:使用 POST 的基于浏览器的上传(Amazon 签名版本 4)
Amazon S3 支持 HTTP POST 请求,以便用户可以直接将内容上传到 Amazon S3。使用 HTTP POST 上传内容可简化上传并减少上传延迟,适用于用户将数据上传至 Amazon S3 中进行存储的情况。本节说明如何对 HTTP POST 请求进行身份验证。有关 HTTP POST 请求、如何创建表单、创建 POST 策略以及示例的更多信息,请参阅使用 POST 的基于浏览器的上传(Amazon 签名版本 4)。
要对 HTTP POST 请求进行身份验证,请执行以下操作:
-
表单必须包含以下字段,以提供签名和相关信息,供 Amazon S3 用于在收到请求时重新计算签名:
元素名称 说明 policy以 Base64 编码的安全策略,用于描述请求中允许的内容。对于签名计算,此策略是您签名的字符串。Amazon S3 必须获取此策略,这样它才能重新计算签名。
x-amz-algorithm使用的签名算法。对于 Amazon 签名版本 4,该值为
AWS4-HMAC-SHA256。x-amz-credential除了访问密钥 ID 外,此元素还提供用于计算签名密钥的范围信息,以便进行签名计算。
它是采用以下形式的字符串:
<your-access-key-id>/<date>/<aws-region>/<aws-service>/aws4_request例如:
AKIAIOSFODNN7EXAMPLE/20130728/us-east-1/s3/aws4_request. .对于 Amazon S3,aws-service 字符串为
s3。有关 Amazon S3aws-region字符串的列表,请参阅《Amazon Web Services 一般参考》中的区域和端点。x-amz-date它是采用 ISO8601 格式的日期值。例如
20130728T000000Z。它与您创建签名密钥时使用的日期相同。该值也必须与您在签名的策略 (
x-amz-date) 中提供的值相同。x-amz-signature(Amazon 签名版本 4)安全策略的 HMAC-SHA256 哈希值。
有关签名的选项的更多信息,请参阅《Amazon Web Services 一般参考》中的将签名添加到 HTTP 请求。
-
POST 策略必须包含以下元素:
元素名称 说明 x-amz-algorithm用于计算签名的签名算法。对于 Amazon 签名版本 4,该值为
AWS4-HMAC-SHA256。x-amz-credential除了访问密钥 ID 外,此元素还提供用于计算签名密钥的范围信息,以便进行签名计算。
它是采用以下形式的字符串:
<your-access-key-id>/<date>/<aws-region>/<aws-service>/aws4_request例如,
AKIAIOSFODNN7EXAMPLE/20130728/us-east-1/s3/aws4_request. .x-amz-date以 ISO8601 格式字符串指定的日期值。例如,“20130728T000000Z”。该日期必须与您在创建用于计算签名的签名密钥时使用的日期相同。
-
对于签名计算,POST 策略是待签字符串。
计算签名
下图说明了签名计算过程。
计算签名
-
使用 UTF-8 编码创建策略。
-
将 UTF-8 编码的策略转换为 Base64。结果是待签字符串。
-
将签名创建为待签字符串的 HMAC-SHA256 哈希值。您将提供签名密钥作为哈希函数的密钥。
-
使用十六进制编码对签名进行编码。
有关创建 HTML 表单、安全策略和示例的更多信息,请参阅以下子主题: