本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
对请求进行身份验证
身份验证是用于识别和验证发送请求的当事方的过程。在身份验证的第一个阶段,Amazon 将验证创建者的身份以及创建者是否已注册使用 Amazon
-
创建者(发件人)获取必要的凭证。
-
创建者向使用者 (接收方) 发送请求和凭证。
-
使用者使用证书来验证创建者是否发送了该请求。
-
将出现以下三种情况之一:
-
如果身份验证成功,使用者将处理该请求。
-
如果身份验证失败,使用者将拒绝请求并返回错误。
-
使用 HMAC-SHA 的基本身份验证过程
使用查询 API 访问 Amazon SQS 时,必须提供以下项目来对请求进行身份验证:
-
这些区域有:Amazon访问密钥 ID确定您的Amazon Web Services 账户,其中Amazon用于查找您的秘密访问密钥。
-
这些区域有:HMAC-SHA 请求签名计算得出的秘密访问密钥是一个只有您知道的共享秘密访问密钥,Amazon— 有关更多信息,请参阅。RFC2104
)。这些区域有:Amazon开发工具包 处理签名过程;但是,如果您通过 HTTP 或 HTTPS 提交查询请求,则必须在每个查询请求中包含一个签名。 -
派生签名版本 4 签名密钥。有关更多信息,请参阅使用 Java 派生签名密钥。
注意 Amazon SQS 支持签名版本 4,该版本相比以前的版本可提供经过改进的基于 SHA256 的安全性和性能。创建使用 Amazon SQS 的新应用程序时,应使用签名版本 4。
-
对请求签名必须采用 Base64 编码。下面的示例 Java 代码将执行此操作:
package amazon.webservices.common; // Define common routines for encoding data in Amazon requests. public class Encoding { /* Perform base64 encoding of input bytes. * rawData is the array of bytes to be encoded. * return is the base64-encoded string representation of rawData. */ public static String EncodeBase64(byte[] rawData) { return Base64.encodeBytes(rawData); } }
-
-
请求的 时间戳 (或到期时间)。在请求中使用的时间戳必须是
dateTime
对象,并包含完整的日期以及小时、分钟和秒。例如: 2007-01-31T23:59:59Z
尽管不是必需的,但我们建议您使用协调世界时(格林威治标准时间)时区提供该对象。注意 确保您的服务器时间设置正确。如果指定时间戳(而不是过期时间),则请求会在指定的时间过后 15 分钟自动过期(如果请求的时间戳比 Amazon 服务器上的当前时间早 15 分钟以上,则 Amazon 不会处理请求)。
如果您使用的是 .NET,则不得发送过于具体的时间戳 (因为 AWS 和 .NET 对如何确定额外时间精度有不同的解释)。在这种情况下,应手动构造精度不超过 1 毫秒的
dateTime
对象。
第 1 部分:来自用户的请求
以下是在使用 HMAC-SHA 请求签名对 Amazon 请求进行身份验证时必须执行的过程。

-
构建要发送到 Amazon 的请求。
-
使用您的秘密访问密钥计算密钥哈希消息验证码 (HMAC-SHA) 签名。
-
在请求中包含签名和您的访问密钥 ID,然后将请求发送给 Amazon。
第 2 部分:来自的响应如下Amazon
Amazon 在响应时开始以下过程。

-
Amazon 使用访问密钥 ID 来查找秘密访问密钥。
-
通过与用于计算您在请求中发送的签名相同的算法,Amazon 可根据请求数据和秘密访问密钥生成签名。
-
将出现以下三种情况之一:
-
如果 Amazon 生成的签名与您在请求中发送的签名相匹配,Amazon 将认为请求是真实的。
-
如果比较失败,则 Amazon 将放弃请求并返回错误。
-