计算 Amazon SWF 的 HMAC-SHA 签名 - Amazon Simple Workflow Service

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

计算 Amazon SWF 的 HMAC-SHA 签名

发给 Amazon SWF 的每个请求都必须进行身份验证。AWS SDK 会自动签署您的请求并管理基于令牌的身份验证。但是,如果要写入自己的 HTTP POST 请求,在对请求进行身份验证时,您需要为 HTTP POST Header 内容创建 x-amzn-authorization 值。

有关对标头进行格式设置的详细信息,请参阅 HTTP 标头内容。有关 AWS 版本 3 签名的 AWS SDK for Java 实现,请参阅 AWSSigner.java 类。

创建请求签名

在创建 HMAC-SHA 请求签名之前,必须获取 AWS 凭证(访问密钥 ID 和私有密钥)。

重要

您可以使用 SHA1 或 SHA256 对请求签名。但是,请务必在整个签名过程中使用同一方法。您选择的方法必须与 HTTP 标头中的 Algorithm 名称的值匹配。

创建请求签名

  1. 创建一个标准化的 HTTP 请求标头。HTTP 标头规范形式包括以下内容:

    • host

    • x-amz- 为开头的任何标头元素

    有关所包含的标头的详细信息,请参阅 HTTP 标头内容

    1. 对于每一个标头名值对,将标头名称转换为小写字母 (但不是标头值)。

    2. 将标头名称映射到逗号分隔的标头值。

      x-amz-example: value1 x-amz-example: value2 => x-amz-example:value1,value2

      有关更多信息,请参阅 RFC 2616 的第 4.2 节

    3. 对于每个标头名称-值对,将其转换成 headerName:headerValue 格式的字符串。从 headerNameheaderValue 的开头和结尾删除所有空白,冒号两边不留空格。

      x-amz-example1:value1,value2 x-amz-example2:value3
    4. 在转换好的每一个字符串 (包括最后一个字符串) 后插入一个换行符 (U+000A)。

    5. 按照字母顺序用标头名称给转换好的字符串集合分类。

  2. 创建包含以下项目的待签字符串值:

    • 1 行:HTTP 方法 (POST),其后是换行符。

    • 2 行:请求 URI (/),其后是换行符。

    • 3 行:空字符串,其后是换行符。

      注意

      通常,这里会显示查询字符串,但 Amazon SWF 不使用查询字符串。

    • 4–n 行:表示步骤 1 中计算的规范请求标头的字符串,后跟换行符。该换行符在 HTTP 请求的标头与正文之间创建一个空白行。有关更多信息,请参见 RFC 2616

    • 请求正文, 跟换行符。

  3. 计算待签字符串值的 SHA256 或 SHA1 摘要。在整个过程中采用同一种 SHA 方法。

  4. 使用上一步骤中的结果值的 SHA256 或 SHA1 摘要(取决于您使用的方法)yi使用 GetSessionToken API 操作从 AWS Security Token Service 获取的临时秘密访问密钥来计算 HMAC-SHA,并对其进行 Base64 编码。

    注意

    Amazon SWF 希望在进行 Base64 编码的 HMAC-SHA 值末尾添加一个等号 (=)。如果 Base64 编码程序不包括附加等号,请在值的结尾附加一个等号。

    有关在 Amazon SWF 和其他 AWS 服务中使用临时安全凭证的更多信息,请参阅《IAM User Guide》中的 AWS Services That Work with IAM

  5. 将生成的值作为 Signature 名称的值放入向 Amazon SWF 发送的 HTTP 请求的 x-amzn-authorization 标头中。

  6. Amazon SWF 会验证该请求并执行指定操作。