php aws signature,使用 Signature Version 4 签署 AWS 请求 - AWS 一般参考

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Signature Version 4 签署 AWS 请求

本节介绍如何创建签名并将其添加到针对 AWS 的 HTTP 请求中。

b8a8cf84bd67f8aea130f3d3eea82bbd.png

签名步骤摘要

要创建已签名的请求,请完成以下操作:

将请求的内容(主机、操作、标头等)组织为标准(规范)格式。规范请求是用于创建待签字符串的输入之一。

使用规范请求和额外信息(例如算法、请求日期、凭证范围和规范请求的摘要(哈希))创建待签字符串。

使用 AWS 秘密访问密钥作为初始哈希操作的密钥,对请求日期、区域和服务执行一系列加密哈希操作(HMAC 操作),从而派生签名密钥。在派生签名密钥后,通过对待签字符串执行加密哈希操作来计算签名。使用派生的签名密钥作为此操作的哈希密钥。

在计算签名后,将其添加到请求的 HTTP 标头或查询字符串中。

重要

AWS 开发工具包可以为您处理签名计算过程,因此您无需手动完成签名过程。有关更多信息,请参阅适用于 Amazon Web Services 的工具。

其他资源

以下资源全面介绍了签名过程的各个方面:

说明如何派生 Signature Version 4 签名密钥的示例。此页演示如何使用 Java、C#、Python、Ruby 和 JavaScript 派生签名密钥。

完整 Signature Version 4 签名过程的示例 (Python)。这组用 Python 编写的程序提供了完整的签名过程示例。这些示例演示了如何利用 POST 请求、利用在请求标头中具有签名信息的 GET 请求以及利用在查询字符串中具有签名信息的 GET 请求进行签名。

请求中的签署过程

以下示例演示了 HTTPS 请求(不带任何签名信息)从您的客户端发送到 AWS 时可能的样子。

GET https://iam.amazonaws.com/?Action=ListUsers&Version=2010-05-08 HTTP/1.1

Content-Type: application/x-www-form-urlencoded; charset=utf-8

Host: iam.amazonaws.com

X-Amz-Date: 20150830T123600Z

在完成签名任务之后,请将身份验证信息添加到请求中。您可通过两种方式添加身份验证信息:

Authorization 标头

您可使用 Authorization 标头将身份验证信息添加到请求中。尽管该 HTTP 标头名为 Authorization,但签名信息实际上是用于身份验证的,目的是确定请求方。

Authorization 标头包含以下信息:

用于签名的算法 (AWS4-HMAC-SHA256)

凭证范围(包含您的访问密钥 ID)

已签名标头的列表

计算签名。该签名基于您的请求信息,由您使用 AWS 秘密访问密钥生成。该签名用于向 AWS 确认您的身份。

下面的示例说明在您创建签名信息并将它添加到请求的 Authorization 标头之后,前面的请求看起来是什么样。

GET https://iam.amazonaws.com/?Action=ListUsers&Version=2010-05-08 HTTP/1.1

Authorization: AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/iam/aws4_request, SignedHeaders=content-type;host;x-amz-date, Signature=5d672d79c15b13162d9279b0855cfba6789a8edb4c82c400e06b5924a6f2b5d7

content-type: application/x-www-form-urlencoded; charset=utf-8

host: iam.amazonaws.com

x-amz-date: 20150830T123600Z

查询字符串

作为一种将身份验证信息添加到 HTTP 请求标头中的替代方法,您可以将它包含在查询字符串中。查询字符串包含请求的所有部分,包括操作的名称和参数、日期以及身份验证信息。

以下示例为您演示如何通过查询字符串中的操作和身份验证信息来构造 GET 请求。

GET https://iam.amazonaws.com?Action=ListUsers&Version=2010-05-08&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fiam%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=60&X-Amz-SignedHeaders=content-type%3Bhost&X-Amz-Signature=37ac2f4fde00b0ac9bd9eadeb459b1bbee224158d66e7ae5fcadb70b2d181d02 HTTP/1.1

content-type: application/x-www-form-urlencoded; charset=utf-8

host: iam.amazonaws.com

查询 API 中的 GET 和 POST 请求

许多 AWS 服务支持的查询 API 可用来通过 HTTP GET 或 POST 发送请求。(在查询 API 中,即使您提交更改状态的请求,即查询 API 本身并非 RESTful,您也可以使用 GET。) 因为 GET 请求通过查询字符串传递参数,所以它们的长度限制为 URL 的最大长度。如果请求包含大型负载(例如,您可能以 JSON 格式为 DynamoDB 请求上传大型 IAM

策略或发送大量参数),则通常使用 POST 请求。

两种类型的请求的签名过程相同。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值