Amazon Simple Workflow Service
开发人员指南 (API Version 2012-01-25)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

计算 Amazon SWF 的 HMAC-SHA 签名

所需的身份验证信息

必须对发给 Amazon Simple Workflow Service (Amazon SWF) 的每个请求进行身份验证。AWS SDK 自动对请求进行签名,并根据 Amazon SWF 的需要来管理基于令牌的身份验证。但是,如果您想写入您自己的 HTTP POST 请求,您需要为 HTTP POST 标头内容创建一个 x-amzn-authorization 值,作为给您的请求进行身份验证的一部分。有关格式化标头的更多信息,请参阅 HTTP 标头内容

签名过程

以下是创建 HMAC-SHA(基于哈希的消息认证码 – 安全散列算法)请求签名所需一系列任务。假设您已接收到 AWS 访问密钥(访问密钥 ID 和私有密钥)。

注意

您可以使用 SHA1 或 SHA256 方法签名。在整个签名过程中使用同一种方法,且签名必须与 HTTP 标头中提供的 Algorithm 名称相匹配。

您可以执行以下任务对请求进行签名并将其提交到 Amazon SWF。

签名过程

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

    • host

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

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

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

    2. 按照 RFC 2616 第 4.2 节的规定,构建标头名称到逗号分隔标头值的映射。

      x-amz-example: value1 x-amz-example: value2 => x-amz-example:value1,value2
    3. 对于每个标头名称-值对,将其转换成 headerName:headerValue 格式的字符串。从 headerNameheaderValue 的开头和结尾部分剪切掉任何空白,且冒号两边不留空格。

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

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

  2. 创建一个包含以下内容的 string-to-sign 值。

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

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

    • 第 3 行:空字符串。通常,这里是一个查询字符串,但 Amazon SWF 不使用查询字符串。跟在换行符之后

    • Line 4–n:表示您在步骤 1 中计算的标准化请求标头的字符串,其后是换行符。这个换行符将根据 RFC 2616 在 HTTP 请求的标头与正文之间创建一个空白行。

    • 请求正文。请不要在请求正文后插入换行符。

  3. 计算 string-to-sign 值的 SHA256 或 SHA1 摘要。在整个过程中采用同一种 SHA 方法。

  4. 使用您通过 GetSessionToken API 从 AWS 安全令牌服务收到的临时私有访问密钥,通过上一个步骤中的结果值的 SHA256 或 SHA1 摘要(取决于您的选择)来计算 HMAC-SHA 并对其进行 Base64 编码。有关将临时安全证书用于 Amazon SWF 和其他 Amazon Web Services 的详细信息,请转到标识和访问管理文档。

    注意

    Amazon SWF 预期 Base64 编码 HMAC-SHA 值的结尾处有一个等号 (=)。如果您的 Base64 编码程序不包括附加等号,请在结尾附加一个等号。

  5. 放置所得的值以作为发给 Amazon SWF 的 HTTP 请求的 Signature 标头中 x-amzn-authorization 名称的值。

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

关于适用于 AWS 版本 3 签名的 Java 实现的 AWS 开发工具包,请参阅 AWSSigner.java 类。