身份验证方法 - AWS Identity and Access Management

身份验证方法

重要

除非您使用 AWS SDK 或 CLI,否则您必须编写代码来计算在请求中提供身份验证信息的签名。AWS 签名版本 4 中的签名计算可能是一项复杂的任务,我们建议您尽可能使用 AWS SDK 或 CLI。

您可以使用以下方法之一快速传递身份验证信息:

HTTP 授权标头

HTTP Authorization 标头是验证请求的最常用方法。所有 REST API 操作(使用 POST 请求的基于浏览器的上传除外)都需要此标头。有关授权标头值以及如何计算签名和相关选项的更多信息,请参阅《Amazon S3 API Reference》中的 Authenticating Requests: Using the Authorization Header (AWS Signature Version 4)

以下是 Authorization 标头值的示例:为便于阅读,此示例中添加了换行符。在您的代码中,该标头必须是连续的字符串。算法和凭证之间没有逗号,但是,必须使用逗号分隔其他元素。

Authorization: AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request, SignedHeaders=host;range;x-amz-date, Signature=fe5f80f77d5fa3beca038a248ff027d0445342fe2855ddc963176630326f1024

下表介绍了上述示例中授权标头值的各个组成部分:

组件 描述

授权

用于计算签名的算法。使用 AWS 签名版本 4 进行身份验证时,必须提供此值。字符串将指定 AWS 签名版本 4 (AWS4) 和签名算法 (HMAC-SHA256)。

凭证

您的访问密钥 ID 和范围信息,包括用于计算签名的日期、区域和服务。

该字符串具有以下形式:

<your-access-key-id>/<date>/<aws-region>/<aws-service>/aws4_request

其中:使用 YYYYMMDD 格式指定 <date> 值。向 Amazon S3 发送请求时,<aws-service> 值为 s3。

SignedHeaders

用于计算 Signature 的请求标头的分号分隔列表。该列表仅包含标头名称,并且标头名称必须为小写。例如:host;range;x-amz-date

签名

256 位签名以 64 个小写十六进制字符表示。例如:fe5f80f77d5fa3beca038a248ff027d0445342fe2855ddc963176630326f1024

请注意,签名计算因所选择的传输有效负载的选项而异。

查询字符串参数

您可以使用查询字符串在 URL 中完全表达请求。在这种情况下,您可以使用查询参数来提供请求信息,包括身份验证信息。由于请求签名是 URL 的一部分,因此这类 URL 通常称为预签名 URL。您可以使用预签名 URL 在 HTML 中嵌入可单击链接,该链接的有效期最长 7 天。有关更多信息,请参阅《Amazon S3 API Reference》中的 Authenticating Requests: Using Query Parameters (AWS 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

标识 AWS 签名的版本以及您用于计算签名的算法。对于 AWS 签名版本 4,您可以将该参数值设置为 AWS4-HMAC-SHA256。该字符串可以标识 AWS 签名版本 4(AWS4)和 HMAC-SHA256 算法 (HMAC-SHA256)。

X-Amz-Credential

除了访问密钥 ID 外,该参数还提供签名有效的范围(AWS 区域和服务)。该值必须与您在签名计算中使用的范围匹配(后续部分将对此进行说明)。

该参数值的一般形式如下:

<your-access-key-id>/<date>/<AWS Region>/<AWS-service>/aws4_request

例如:AKIAIOSFODNN7EXAMPLE/20130721/us-east-1/s3/aws4_request

有关 AWS 区域字符串的列表,请参阅《AWS General Reference》中的 Regional Endpoints

X-Amz-Date

日期和时间格式必须遵循 ISO 8601 标准,并且必须按照 yyyyMMddTHHmmssZ 格式进行格式化。例如,如果日期和时间是“08/01/2016 15:32:41.982-700”,则必须先将其转换为 UTC(协调世界时),然后以“20160801T223241Z”形式提交。

X-Amz-Expires

提供生成的预签名 URL 的有效时间段(以秒为单位)。例如,86400(24 小时)。该值是一个整数。您可以设置的最小值为 1,最大值为 604800(七天)。预签名 URL 的有效期长达七天,因为您在签名计算中使用的签名密钥的有效期最长为七天。

X-Amz-SignedHeaders

列出用于计算签名的标头。签名计算中需要以下标头:

  • HTTP 主机标头。

  • 您计划添加到请求的任何 x-amz-* 标头。

为了提高安全性,您应该签署计划在请求中包含的所有请求标头。

X-Amz-Signature

提供签名以验证您的请求。该签名必须与服务计算的签名相匹配;否则服务会拒绝该请求。例如,733255ef022bec3f2a8701cd61d4b371f3f28c9f193a1f02279211d48d5193d7

以下部分将介绍签名计算:

X-Amz-Security-Token

如果使用来自 STS 服务的凭证,则为可选凭证参数。