このガイドのステップを完了するには、Amazon Chime システム管理者である必要があります。Amazon Chime デスクトップクライアント、ウェブアプリケーション、またはモバイルアプリに関するヘルプが必要な場合は、「Amazon Chime ユーザーガイド」の「Getting support」を参照してください。
翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
チャットボットリクエストの認証
Amazon Chime チャットルームからチャットボットに送信されたリクエストを認証できます。これを行うには、リクエストに基づいて署名を計算します。次に、計算された署名がリクエストのヘッダーの 1 つに一致することを検証します。Amazon Chime は HMAC SHA256 ハッシュを使用してこの署名を生成します。
チャットボットがアウトバウンド HTTPS エンドポイントを使用して Amazon Chime 用に設定されている場合、次の認証ステップを使用します。
アウトバウンド HTTPS エンドポイントが設定されているチャットボットへの Amazon Chime からの署名リクエストを検証するには
HTTP リクエストから [Chime-Signature] を取得します。
リクエストの [Chime-Request-Timestamp] ヘッダーおよび [body] を取得します。次に、2 つの要素の間を区切るために縦線を使用して文字列を形成します。
CreateBot 応答から [Security Token (セキュリティトークン)] を [HMAC_SHA_256] の最初のキーとして使用し、ステップ 2 で作成した文字列をハッシュします。
ハッシュされたバイトを Base64 エンコードで署名文字列にエンコーディングします。
この計算された署名と [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 からの署名リクエストを検証するには
Lambda リクエスト ClientContext から Chime-Signature と Chime-Request-Timestamp を Base64 でエンコードされた JSON 形式で取得します。
{ "Chime-Signature" : "1234567890", "Chime-Request-Timestamp" : "2019-04-04T21:30:43.181Z" }
リクエストペイロードから [body] を取得します。
CreateBot
応答から [セキュリティトークン] を [HMAC_SHA_256] の最初のキーとして使用し、作成した文字列をハッシュします。ハッシュされたバイトを Base64 エンコードで署名文字列にエンコーディングします。
この計算された署名と [Chime-Signature] ヘッダーの 1 つを比較します。
Lambda 呼び出し中に com.amazonaws.SdkClientException
が発生する場合、Amazon Chime はリクエストを 2 回再試行します。