

**终止支持通知**： AWS 将于 2026 年 2 月 20 日终止对 Amazon Chime 服务的支持。2026 年 2 月 20 日之后，您将无法再访问 Amazon Chime 控制台或 Amazon Chime 应用程序资源。有关更多信息，请访问该[博客文章](https://aws.amazon.com/blogs/messaging-and-targeting/update-on-support-for-amazon-chime/)。**注意：**这不会影响 [Amazon Chime 软件开发工具包](https://aws.amazon.com/chime/chime-sdk/)服务的可用性。

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

# 对聊天机器人请求进行身份验证
<a name="auth-bots"></a>

您可以对 Amazon Chime 聊天室向聊天机器人发送的请求进行身份验证。为此，请根据请求计算签名。然后，验证计算得出的签名是否与请求标题中的签名相匹配。Amazon Chime 使用 HMAC SHA256 哈希来生成签名。

如果使用 HTTPS 出站端点配置 Amazon Chime 聊天机器人，请采用以下身份验证步骤。

**为配有 HTTPS 出站端点的聊天机器人验证 Amazon Chime 签名请求**

1. 从 HTTP 请求中获取 **Chime-Signature** 标头。

1. 获取请求的 **Chime-Request-Timestamp** 标头和 **body (正文)**。然后，在这两个元素之间使用竖线作为分隔符以形成一个字符串。

1. 使用 CreateBot 响应**SecurityToken**中的作为 **HMAC\_SHA\_256** 的初始密钥，并对您在步骤 2 中创建的字符串进行哈希处理。

1. 使用 Base64 编码器对上述哈希字节编码为一个签名字符串。

1. 将此计算得到的签名与 **Chime-Signature** 标头中的签名进行比较。

下面的代码示例演示了如何使用 Java 生成签名。

```
        private final String DELIMITER = "|";
        private final String HMAC_SHA_256 = "HmacSHA256";
   
        private String generateSignature(String securityToken, String requestTime, String requestBody) 
        {
            try {
                final Mac mac = Mac.getInstance(HMAC_SHA_256);
                SecretKeySpec key = new SecretKeySpec(securityToken.getBytes(UTF_8), HMAC_SHA_256);
                mac.init(key);
                String data = requestTime + DELIMITER + requestBody;
                byte[] rawHmac = mac.doFinal(data.getBytes(UTF_8));

                return Base64.getEncoder().encodeToString(rawHmac);
                } 
            catch (Exception e) {
                throw e;
                }
         }
```

HTTPS 出站端点必须在 2 秒内通过 `200 OK` 响应 Amazon Chime 请求。否则，请求将失败。如果 HTTPS 出站端点（因连接问题或读取超时）超过 2 秒不可用，或如果 Amazon Chime 收到 5xx 响应代码，则 Amazon Chime 会重发两次请求。在初始请求失败 200 毫秒后将发送第一次重试请求。在第一次重试请求失败 400 毫秒后发送第二次重试请求。如果在第二次重试之后出站 HTTPS 端点仍不可用，则请求失败。

**注意**  
每当重试请求时，**Chime-Request-Timestamp** 都会发生更改。

如果使用 Lambda 函数 ARN 配置 Amazon Chime 聊天机器人，请采用以下身份验证步骤。

**为配有 Lambda 函数 ARN 的聊天机器人验证 Amazon Chime 签名请求**

1. 从 Lambda 请求中获取 **Chime-Signatur** **e 和 Chime-Request-Tim** estam **ClientContext**p，采用 Base64 编码的 JSON 格式。

   ```
   {
   "Chime-Signature" : "1234567890",
   "Chime-Request-Timestamp" : "2019-04-04T21:30:43.181Z"
   }
   ```

1. 从请求负载中获取请求的 **body (正文)**。

1. 使用`CreateBot`响应**SecurityToken**中的作为 **HMAC\_SHA\_256** 的初始密钥，并对您创建的字符串进行哈希处理。

1. 使用 Base64 编码器对上述哈希字节编码为一个签名字符串。

1. 将此计算得到的签名与 **Chime-Signature** 标头中的签名进行比较。

如果在调用 Lambda 时发生 `com.amazonaws.SdkClientException`，Amazon Chime 会重发两次请求。