Laiye Chatbot vérifie la présence et la validité de l'en-tête HTTP X-Mindsay-Signature afin de valider l'authenticité des requêtes. Pour cela, Laiye Chatbot et son partenaire partagent une clé secrète (définie lors de l'intégration).
Le partenaire de Laiye Chatbot doit générer une signature lorsqu'il appelle l'API. L'API Laiye tente de générer la même signature de son côté et vérifie qu'elle correspond à celle fournie dans l'en-tête HTTP X-Mindsay-Signature.
Pour empêcher les attaques par rejeu, l'API Laiye vérifie également que la valeur de X-Mindsay-Timestamp n'est pas trop ancienne (tolérance de 5 minutes).
Voici comment générer la signature :
Concaténez la valeur de l'en-tête
X-Mindsay-Timestampavec le corps de la requêteCalculez l'empreinte hexadécimale de cette chaîne à l'aide de l'algorithme standard
HMAC-SHA256et de la clé secrète partagée
Exemple
X-Mindsay-Timestamp:
1575215418
Body:
{"unique_chatter_identifier_key": "member_id", "unique_chatter_identifier_value": "123"}
Secret:
a_secure_secret
Concatenated value:
1575215418{"unique_chatter_identifier_key": "member_id", "unique_chatter_identifier_value": "123"}
Computed HMAC:
acee24dc55838d04dbd879967dffda464f843799a9e6b14c97d9a2b908de6d85Elle peut être générée de la façon suivante :
const requestData = pm.request.body.raw;
const secretKey = "your-secret-key";
const timestamp = Math.floor(Date.now() / 1000).toString();
const signature = calculateSignature(secretKey, timestamp, requestData);
pm.request.headers.add({
key: 'X-Mindsay-Signature',
value: signature
});
pm.request.headers.add({
key: "X-Mindsay-Timestamp",
value: timestamp
})
function calculateSignature(secretKey, timestamp, rawBody) {
const CryptoJS = require('crypto-js');
const hmac = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, secretKey);
hmac.update(CryptoJS.enc.Utf8.parse(timestamp.toString()));
hmac.update(CryptoJS.enc.Utf8.parse(rawBody));
return hmac.finalize().toString(CryptoJS.enc.Hex);Vous pouvez copier-coller cet extrait dans une requête Postman en tant que Pre-request script