身份验证方法
重要
除非您使用 Amazon SDK 或 CLI,否则您必须编写代码来计算在请求中提供身份验证信息的签名。Amazon 签名版本 4 中的签名计算可能是一项复杂的任务,我们建议您尽可能使用 Amazon SDK 或 CLI。
您可以使用以下方法之一快速传递身份验证信息:
HTTP 授权标头
HTTP Authorization
标头是验证请求的最常用方法。所有 REST API 操作(使用 POST
请求的基于浏览器的上传除外)都需要此标头。有关授权标头值以及如何计算签名和相关选项的更多信息,请参阅《Amazon S3 API Reference》中的 Authenticating Requests: Using the Authorization Header (Amazon Signature Version 4)。
以下是 Authorization
标头值的示例:为便于阅读,此示例中添加了换行符。在您的代码中,该标头必须是连续的字符串。算法和凭证之间没有逗号,但是,必须使用逗号分隔其他元素。
Authorization: Amazon4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request, SignedHeaders=host;range;x-amz-date, Signature=fe5f80f77d5fa3beca038a248ff027d0445342fe2855ddc963176630326f1024
下表介绍了上述示例中授权标头值的各个组成部分:
组件 | 描述 |
---|---|
授权 |
用于计算签名的算法。使用 Amazon 签名版本 4 进行身份验证时,必须提供此值。字符串将指定 Amazon 签名版本 4 ( |
凭证 |
您的访问密钥 ID 和范围信息,包括用于计算签名的日期、区域和服务。 该字符串具有以下形式:
其中:使用 YYYYMMDD 格式指定 |
SignedHeaders |
用于计算 |
签名 |
256 位签名以 64 个小写十六进制字符表示。例如: 请注意,签名计算因所选择的传输有效负载的选项而异。 |
查询字符串参数
您可以使用查询字符串在 URL 中完全表达请求。在这种情况下,您可以使用查询参数来提供请求信息,包括身份验证信息。由于请求签名是 URL 的一部分,因此这类 URL 通常称为预签名 URL。您可以使用预签名 URL 在 HTML 中嵌入可单击链接,该链接的有效期最长 7 天。有关更多信息,请参阅《Amazon S3 API Reference》中的 Authenticating Requests: Using Query Parameters (Amazon Signature Version 4)。
以下是示例预签名 URL。为便于阅读,此示例中添加了换行符:
https://s3.amazonaws.com/amzn-s3-demo-bucket/test.txt ? X-Amz-Algorithm=AWS4-HMAC-SHA256 & X-Amz-Credential=<your-access-key-id>/20130721/us-east-1/s3/aws4_request & X-Amz-Date=20130721T201207Z & X-Amz-Expires=86400 & X-Amz-SignedHeaders=host &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 |
标识 Amazon 签名的版本以及您用于计算签名的算法。对于 Amazon 签名版本 4,您可以将该参数值设置为 |
X-Amz-Credential |
除了访问密钥 ID 外,该参数还提供签名有效的范围(Amazon 区域和服务)。该值必须与您在签名计算中使用的范围匹配(后续部分将对此进行说明)。 该参数值的一般形式如下:
例如: 有关 Amazon 区域字符串的列表,请参阅《Amazon General Reference》中的 Regional Endpoints。 |
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 服务的凭证,则为可选凭证参数。 |