チャットボットリクエストの認証 - Amazon Chime

このガイドのステップを完了するには、Amazon Chime システム管理者である必要があります。Amazon Chime デスクトップクライアント、ウェブアプリケーション、またはモバイルアプリに関するヘルプが必要な場合は、「Amazon Chime ユーザーガイド」の「Getting support」を参照してください。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

チャットボットリクエストの認証

Amazon Chime チャットルームからチャットボットに送信されたリクエストを認証できます。これを行うには、リクエストに基づいて署名を計算します。次に、計算された署名がリクエストのヘッダーの 1 つに一致することを検証します。Amazon Chime は HMAC SHA256 ハッシュを使用してこの署名を生成します。

チャットボットがアウトバウンド HTTPS エンドポイントを使用して Amazon Chime 用に設定されている場合、次の認証ステップを使用します。

アウトバウンド HTTPS エンドポイントが設定されているチャットボットへの Amazon Chime からの署名リクエストを検証するには
  1. HTTP リクエストから [Chime-Signature] を取得します。

  2. リクエストの [Chime-Request-Timestamp] ヘッダーおよび [body] を取得します。次に、2 つの要素の間を区切るために縦線を使用して文字列を形成します。

  3. CreateBot 応答から [Security Token (セキュリティトークン)] を [HMAC_SHA_256] の最初のキーとして使用し、ステップ 2 で作成した文字列をハッシュします。

  4. ハッシュされたバイトを Base64 エンコードで署名文字列にエンコーディングします。

  5. この計算された署名と [Chime-Signature] ヘッダーの 1 つを比較します。

次のコードサンプルでは、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 リクエストに応答する必要があります。それ以外の場合、このリクエストは失敗します。2 秒後にアウトバウンド HTTPS エンドポイントが使用不可である場合 (接続または読み取りタイムアウトのため)、あるいは Amazon Chime が 5xx 応答コードを受信する場合、Amazon Chime はリクエストを 2 回再試行します。1 回目の再試行は、最初のリクエストが失敗してから 200 ミリ秒後に送信されます。2 回目の再試行は、前の再試行が失敗してから 400 ミリ秒後に送信されます。2 回目の再試行後でも発信 HTTPS エンドポイントがまだ使用不可である場合、このリクエストは失敗します。

注記

[Chime-Request-Timestamp] はリクエストの再試行ごとに変更します。

Lambda 関数 ARN を使用して Amazon Chime 用のチャットボットが設定されている場合、次の認証ステップを使用します。

Lambda 関数 ARN が設定されているチャットボットへの Amazon Chime からの署名リクエストを検証するには
  1. Lambda リクエスト ClientContext から Chime-SignatureChime-Request-Timestamp を Base64 でエンコードされた JSON 形式で取得します。

    { "Chime-Signature" : "1234567890", "Chime-Request-Timestamp" : "2019-04-04T21:30:43.181Z" }
  2. リクエストペイロードから [body] を取得します。

  3. CreateBot 応答から [セキュリティトークン][HMAC_SHA_256] の最初のキーとして使用し、作成した文字列をハッシュします。

  4. ハッシュされたバイトを Base64 エンコードで署名文字列にエンコーディングします。

  5. この計算された署名と [Chime-Signature] ヘッダーの 1 つを比較します。

Lambda 呼び出し中に com.amazonaws.SdkClientException が発生する場合、Amazon Chime はリクエストを 2 回再試行します。