对请求进行身份验证:使用 Authorization 标头(Amazon 签名版本 4)
主题
概述
使用 HTTP Authorization 标头是提供身份验证信息的最常用方法。除了 POST 请求和使用查询参数签名的请求外,所有 Amazon S3 操作都使用 Authorization 请求标头来提供身份验证信息。
以下是 Authorization 标头值的示例:为便于阅读,此示例中添加了换行符:
Authorization: AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request, SignedHeaders=host;range;x-amz-date, Signature=fe5f80f77d5fa3beca038a248ff027d0445342fe2855ddc963176630326f1024
下表介绍了上述示例中 Authorization 标头值的各个组成部分:
| 组件 | 说明 |
|---|---|
AWS4-HMAC-SHA256 |
用于计算签名的算法。使用 Amazon 签名版本 4 进行身份验证时必须提供此值。 该字符串指定 Amazon 签名版本 4 ( |
Credential |
您的访问密钥 ID 和范围信息,包括用于计算签名的日期、区域和服务。 该字符串具有以下形式:
其中:
|
SignedHeaders |
用于计算
|
Signature |
256 位签名以 64 个小写十六进制字符表示。例如:请注意,签名计算因所选择的传输有效负载的选项而异。 |
签名计算因您选择用于传输请求有效载荷的方法而异。S3 支持以下选项:
-
在单个分块中传输有效载荷:在这种情况下,您可以使用以下签名计算选项:
-
签名的有效载荷选项:您可以选择计算整个有效载荷校验和并将其包含在签名计算中。这增加了安全性,但您需要读取两次有效载荷或将其缓冲到内存中。
例如,为了上传文件,您需要先读取文件以计算签名计算的有效载荷哈希值,然后在创建请求时再次读取文件以进行传输。对于较小的有效载荷,这种方法可能更可取。但是,对于大型文件,读取文件两次可能效率低下,因此您可能需要改为分块上传数据。
为了提高安全性,我们建议您包含有效载荷校验和。
-
未签名的有效载荷选项:不在签名计算中包含有效载荷校验和。
有关计算签名和构造 Authorization 标头值的分步说明,请参阅 Authorization 标头的签名计算:在单个分块中传输有效载荷(Amazon 签名版本 4)。
-
-
在多个分块中传输有效载荷(分块上传):在这种情况下,您可以分块传输有效载荷。无论有效载荷大小如何,您都可以分块传输有效载荷。
您可以将有效载荷分成多个分块。这些分块可以是固定大小,也可以是可变大小。通过分块上传数据,可以避免读取整个有效载荷来计算签名。相反,对于第一个分块,您可以计算仅使用请求标头的种子签名。第二个分块包含第一个分块的签名,随后的每个分块都包含其前一个分块的签名。在上传结束时,您将发送一个包含 0 字节数据的最后一个分块,其中包含有效载荷的最后一个分块的签名。有关更多信息,请参阅 Authorization 标头的签名计算:在多个分块中传输有效载荷(分块上传)(Amazon 签名版本 4)。
签署请求时,您可以使用 Amazon 签名版本 4 或 Amazon 签名版本 4A。两者之间的关键区别取决于签名的计算方式。对于 Amazon 签名版本 4A,签名不包含区域特定的信息,并且使用 AWS4-ECDSA-P256-SHA256 算法计算得出。
除了这些选项外,您还可以选择在请求中加入尾部。为了在请求中包含尾部,您需要通过将 x-amz-content-sha256 设置为适当的值来在标头中指定该尾部。如果您使用的是尾随标头,则必须在标头中包含 x-amz-trailer,并将尾随标头名称指定为逗号分隔列表中的字符串。所有尾随标头都在最后一个分块之后写入。如果您要将数据分成多个分块进行上传,则在发送尾随标头之前,必须发送包含 0 字节数据的最后一个分块。
发送请求时,您必须通过添加带有以下值之一的 x-amz-content-sha256 标头,来告诉 Amazon S3 您在签名计算中选择了上述哪个选项:
| 标头值 | 说明 |
|---|---|
|
实际有效载荷校验和值 |
此值是对象的实际校验和,仅当您在单个分块中上传数据时才适用。 |
|
UNSIGNED-PAYLOAD |
当您将对象作为单个未签名的分块上传时,使用此值。 |
|
STREAMING-UNSIGNED-PAYLOAD-TRAILER |
在通过多个分块发送未签名的有效载荷时,使用此值。在这种情况下,在上传分块后,您还有一个尾随标头。 |
|
STREAMING-AWS4-HMAC-SHA256-PAYLOAD |
在通过多个分块发送有效载荷并使用 |
|
STREAMING-AWS4-HMAC-SHA256-PAYLOAD-TRAILER |
在通过多个分块发送有效载荷并使用 |
|
STREAMING-AWS4-ECDSA-P256-SHA256-PAYLOAD |
在通过多个分块发送有效载荷并使用 |
|
STREAMING-AWS4-ECDSA-P256-SHA256-PAYLOAD-TRAILER |
在通过多个分块发送有效载荷并使用 |
收到请求后,Amazon S3 使用 Authorization 标头和 date 标头中的信息重新创建待签字符串。然后,它使用身份验证服务来验证签名是否匹配。可以使用 HTTP Date 或 x-amz-date 标头来指定请求日期。如果两个标头都存在,则 x-amz-date 优先。
如果签名匹配,Amazon S3 会处理您的请求;否则,您的请求将失败。
有关更多信息,请参阅以下主题:
Authorization 标头的签名计算:在单个分块中传输有效载荷(Amazon 签名版本 4)
Authorization 标头的签名计算:在多个分块中传输有效载荷(分块上传)(Amazon 签名版本 4)
尾随标头的签名计算(分块上传)(Amazon 签名版本 4)