Authentifier les demandes de chatbot - Amazon Chime

Vous devez être un administrateur système Amazon Chime pour effectuer les étapes décrites dans ce guide. Si vous avez besoin d'aide concernant le client de bureau, l'application Web ou l'application mobile Amazon Chime, consultez la section Obtenir de l'aide dans le guide de l'utilisateur Amazon Chime.

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Authentifier les demandes de chatbot

Vous pouvez authentifier les demandes envoyées à votre chatbot depuis un salon de discussion Amazon Chime. Pour ce faire, calculez une signature en fonction de la demande. Vérifiez ensuite que la signature calculée correspond à celle de l'en-tête de la demande. Amazon Chime utilise le hachage HMAC SHA256 pour générer la signature.

Si votre chatbot est configuré pour Amazon Chime à l'aide d'un point de terminaison HTTPS sortant, suivez les étapes d'authentification suivantes.

Pour valider une demande signée d'Amazon Chime concernant un chatbot avec un point de terminaison HTTPS sortant configuré
  1. Obtenez l'en-tête Chime-Signature à partir de la demande HTTP.

  2. Obtenez l'en-tête Chime-Request-Timestamp et le corps de la demande. Utilisez ensuite une barre verticale comme séparateur entre les deux éléments afin de former une chaîne.

  3. Utilisez leSecurityTokende CreateBot réponse comme clé initiale deHMAC_SHA_256, et hachez la chaîne que vous avez créée à l'étape 2.

  4. Encodez l'octet haché avec l'encodeur Base64 en une chaîne de signature.

  5. Comparez cette signature calculée à celle de l'en-tête Chime Signature.

L'exemple de code suivant montre comment générer une signature à l'aide de 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; } }

Le point de terminaison HTTPS sortant doit répondre à la demande Amazon Chime avec200 OKdans les 2 secondes. Sinon, la demande échoue. Si le point de terminaison HTTPS sortant n'est pas disponible au bout de 2 secondes, probablement en raison d'un délai de connexion ou de lecture, ou si Amazon Chime reçoit un code de réponse 5xx, Amazon Chime réessaie la demande deux fois. La première nouvelle tentative est envoyée 200 millisecondes après l'échec de la demande initiale. La deuxième nouvelle tentative est envoyée 400 millisecondes après l'échec de la nouvelle tentative précédente. Si le point de terminaison HTTPS sortant est toujours indisponible après la deuxième nouvelle tentative, la demande échoue.

Note

L'en-tête Chime-Request-Timestamp change chaque fois que la demande est renouvelée.

Si votre chatbot est configuré pour Amazon Chime à l'aide d'un ARN de fonction Lambda, suivez les étapes d'authentification suivantes.

Pour valider une demande signée d'Amazon Chime pour un chatbot avec une fonction Lambda (ARN) configurée
  1. Obtenez leSignature de carillonetHorodatage de la demande Chime-Requestà partir de la requête LambdaClientContext, au format JSON codé en Base64.

    { "Chime-Signature" : "1234567890", "Chime-Request-Timestamp" : "2019-04-04T21:30:43.181Z" }
  2. Obtenez le corps de la demande à partir de la charge utile de la demande.

  3. Utilisez leSecurityTokendeCreateBotréponse comme clé initiale deHMAC_SHA_256, et hachez la chaîne que vous avez créée.

  4. Encodez l'octet haché avec l'encodeur Base64 en une chaîne de signature.

  5. Comparez cette signature calculée à celle de l'en-tête Chime Signature.

Si uncom.amazonaws.SdkClientExceptionse produit pendant l'appel Lambda, Amazon Chime réessaie la demande deux fois.