计算 Amazon SWF 的 HMAC-SHA 签名值 - Amazon Simple Workflow Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

计算 Amazon SWF 的 HMAC-SHA 签名值

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

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

创建请求签名

在创建 HMAC-SHA 请求签名之前,必须获取 Amazon 凭证(访问密钥 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. 创建包含以下项目的待签字符串值:

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

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

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

      注意

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

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

    • 请求正文, 跟换行符。

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

  4. 使用通过上一步骤中的临时秘密访问密钥从中的 SHA256 或 SHA1 摘要 (取决于所用方法) 来计算 HMAC-SHA 并对其进行 Base64 编码。Amazon使用的 Security Token ServiceGetSessionTokenAPI 操作。

    注意

    Amazon SWF 需要一个等号(=),其后是 Base64 编码 HMAC-SHA 值的结尾处。如果 Base64 编码程序不包括附加等号,请在值的结尾附加一个等号。

    有关使用临时安全凭证与 Amazon SWF 和其他Amazon服务,请参阅Amazon使用的服务中的IAM 用户指南

  5. 将结果值放置为Signature名称中的x-amzn-authorization向 Amazon SWF 发送 HTTP 请求的标头。

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