

# 身份验证方法
<a name="reference_sigv-authentication-methods"></a>

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

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

## HTTP 授权标头
<a name="aws-signing-authentication-methods-http"></a>

HTTP `Authorization` 标头是验证请求的最常用方法。所有 REST API 操作（使用 `POST` 请求的基于浏览器的上传除外）都需要此标头。

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

**Example SigV4**  

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

**Example SigV4a**  

```
Authorization: AWS4-ECDSA-P256-SHA256
Credential=AKIAIOSFODNN7EXAMPLE/20130524/s3/aws4_request, 
SignedHeaders=host;range;x-amz-date;x-amz-region-set,
Signature=fe5f80f77d5fa3beca038a248ff027d0445342fe2855ddc963176630326f1024
```

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


| 组件 | 说明 | 
| --- | --- | 
|  授权  | 用于计算签名的算法。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/reference_sigv-authentication-methods.html)  | 
|  凭证  |  您的访问密钥 ID 和范围信息。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/reference_sigv-authentication-methods.html) <date> 值使用 YYYYMMDD 格式指定。当发送请求到 Amazon S3 时，<aws-service> 值为 S3。  | 
|  SignedHeaders  |   用于计算签名的请求标头的分号分隔列表。该列表仅包含标头名称，并且标头名称必须为小写。例如：`host;range;x-amz-date` 对于 SigV4a，您必须包含一个区域集标头，该标头指定请求将在哪一组区域中生效。标头 X-Amz-Region-Set 被指定为逗号分隔值的列表。  | 
|  签名  |  256 位签名以 64 个小写十六进制字符表示。例如：`fe5f80f77d5fa3beca038a248ff027d0445342fe2855ddc963176630326f1024` 请注意，签名计算因所选择的传输有效负载的选项而异。  | 

## 查询字符串参数
<a name="aws-signing-authentication-methods-query"></a>

您可以使用查询字符串在 URL 中完全表达请求。在这种情况下，您可以使用查询参数来提供请求信息，包括身份验证信息。由于请求签名是 URL 的一部分，因此这类 URL 通常称为预签名 URL。您可以使用预签名 URL 在 HTML 中嵌入可单击链接，该链接的有效期最长 7 天。有关更多信息，请参阅《Amazon S3 API Reference**》中的 [Authenticating Requests: Using Query Parameters (AWS Signature Version 4)](https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html)。

以下示例显示了 SigV4 和 SigV4a 的预签名 URL。为便于阅读，此示例中添加了换行符：

**Example 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>
```

**Example 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 签名的版本和用于计算签名的算法。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/reference_sigv-authentication-methods.html)  | 
|  X-Amz-Credential  |  除了访问密钥 ID 外，该参数还提供签名有效的范围。该值必须与您在签名计算中使用的范围匹配（后续部分将对此进行说明）。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/reference_sigv-authentication-methods.html) 有关 AWS 区域字符串的列表，请参阅《AWS General Reference**》中的 [Regional Endpoints](https://docs.aws.amazon.com//general/latest/gr/rande.html#regional-endpoints)。  | 
|  X-Amz-Region-Set  |  请求将在其中生效的区域集。标头 x-amz-region-set 被指定为逗号分隔值的列表。  | 
|  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  |  列出用于计算签名的标头。签名计算中需要以下标头： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/reference_sigv-authentication-methods.html) 为了提高安全性，您应该签署计划在请求中包含的所有请求标头。  | 
|  X-Amz-Signature  |  提供签名以验证您的请求。该签名必须与服务计算的签名相匹配；否则服务会拒绝该请求。例如，`733255ef022bec3f2a8701cd61d4b371f3f28c9f193a1f02279211d48d5193d7` 以下部分将介绍签名计算：  | 
|  X-Amz-Security-Token  |  如果使用来自 STS 服务的凭证，则为可选凭证参数。  | 