重要
除非您使用 AWS SDK 或 CLI,否则您必须编写代码来计算在请求中提供身份验证信息的签名。AWS 签名版本 4 中的签名计算可能是一项复杂的任务,我们建议您尽可能使用 AWS SDK 或 CLI。
您可以使用以下方法之一快速传递身份验证信息:
HTTP 授权标头
HTTP Authorization
标头是验证请求的最常用方法。所有 REST API 操作(使用 POST
请求的基于浏览器的上传除外)都需要此标头。
以下示例显示了 SigV4 和 SigV4a 的 Authorization
标头值。为便于阅读,此示例中添加了换行符。在您的代码中,该标头必须是连续的字符串。算法和凭证之间没有逗号,但是,必须使用逗号分隔其他元素。
例 SigV4
Authorization: AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request, SignedHeaders=host;range;x-amz-date, Signature=fe5f80f77d5fa3beca038a248ff027d0445342fe2855ddc963176630326f1024
例 SigV4a
Authorization: AWS4-ECDSA-P256-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/s3/aws4_request, SignedHeaders=host;range;x-amz-date;x-amz-region-set, Signature=fe5f80f77d5fa3beca038a248ff027d0445342fe2855ddc963176630326f1024
下表介绍了上述示例中授权标头值的各个组成部分:
组件 | 描述 |
---|---|
授权 |
用于计算签名的算法。
|
凭证 |
您的访问密钥 ID 和范围信息。
<date> 值使用 YYYYMMDD 格式指定。当发送请求到 Amazon S3 时,<aws-service> 值为 S3。 |
SignedHeaders |
用于计算签名的请求标头的分号分隔列表。该列表仅包含标头名称,并且标头名称必须为小写。例如: 对于 SigV4a,您必须包含一个区域集标头,该标头指定请求将在哪一组区域中生效。标头 X-Amz-Region-Set 被指定为逗号分隔值的列表。 |
签名 |
256 位签名以 64 个小写十六进制字符表示。例如: 请注意,签名计算因所选择的传输有效负载的选项而异。 |
查询字符串参数
您可以使用查询字符串在 URL 中完全表达请求。在这种情况下,您可以使用查询参数来提供请求信息,包括身份验证信息。由于请求签名是 URL 的一部分,因此这类 URL 通常称为预签名 URL。您可以使用预签名 URL 在 HTML 中嵌入可单击链接,该链接的有效期最长 7 天。有关更多信息,请参阅《Amazon S3 API Reference》中的 Authenticating Requests: Using Query Parameters (AWS Signature Version 4)。
以下示例显示了 SigV4 和 SigV4a 的预签名 URL。为便于阅读,此示例中添加了换行符:
例 SigV4
https://s3.amazonaws.com/amzn-s3-demo-bucket/test.txt ? X-Amz-Algorithm=AWS4-HMAC-SHA256 & X-Amz-Credential=<your-access-key-id>/20130721/<region>/s3/aws4_request & X-Amz-Date=20130721T201207Z & X-Amz-Expires=86400 & X-Amz-SignedHeaders=host &X-Amz-Signature=<signature-value>
例 SigV4a
http://s3.amazonaws.com/amzn-s3-demo-bucket/test.txt ?
X-Amz-Algorithm=AWS4-ECDSA-P256-SHA256 &
X-Amz-Credential=<your-access-key-id>/20240721/s3/aws4_request &
X-amz-Region-Set=<regionset> &
X-Amz-Date=20240721T201207Z &
X-Amz-Expires=86400 &
X-Amz-SignedHeaders=host;x-amz-region-set &
X-Amz-Signature=<signature-value>
注意
URL 中的 X-Amz-Credential
值显示“/”字符只是为了方便阅读。实际上,它应该编码为 %2F。例如:
&X-Amz-Credential=<your-access-key-id>%2F20130721%2Fus-east-1%2Fs3%2Faws4_request
下表介绍了 URL 中提供身份验证信息的查询参数。
查询字符串参数名称 | 描述 |
---|---|
X-Amz-Algorithm |
AWS 签名的版本和用于计算签名的算法。
|
X-Amz-Credential |
除了访问密钥 ID 外,该参数还提供签名有效的范围。该值必须与您在签名计算中使用的范围匹配(后续部分将对此进行说明)。
有关 AWS 区域字符串的列表,请参阅《AWS General Reference》中的 Regional Endpoints。 |
X-Amz-Region-Set |
请求将在其中生效的区域集。标头 x-amz-region-set 被指定为逗号分隔值的列表。 |
X-Amz-Date |
日期和时间格式必须遵循 ISO 8601 标准,并且必须按照 |
X-Amz-Expires |
提供生成的预签名 URL 的有效时间段(以秒为单位)。例如,86400(24 小时)。该值是一个整数。您可以设置的最小值为 1,最大值为 604800(七天)。预签名 URL 的有效期长达七天,因为您在签名计算中使用的签名密钥的有效期最长为七天。 |
X-Amz-SignedHeaders |
列出用于计算签名的标头。签名计算中需要以下标头:
为了提高安全性,您应该签署计划在请求中包含的所有请求标头。 |
X-Amz-Signature |
提供签名以验证您的请求。该签名必须与服务计算的签名相匹配;否则服务会拒绝该请求。例如, 以下部分将介绍签名计算: |
X-Amz-Security-Token |
如果使用来自 STS 服务的凭证,则为可选凭证参数。 |