Laiye Chatbot comprueba la existencia y validez del encabezado HTTP X-Mindsay-Signature para validar la autenticidad de la solicitud. Para ello, Laiye Chatbot y su socio comparten una clave secreta (configurada durante la integración).
El socio de Laiye Chatbot debe generar una firma al realizar una solicitud a la API. La API de Laiye intenta generar la misma firma por su parte y comprueba que coincida con la firma proporcionada en el encabezado HTTP X-Mindsay-Signature.
Para evitar ataques de repetición, la API de Laiye también valida que X-Mindsay-Timestamp no sea demasiado antigua (tolerancia de 5 minutos).
Así es como se genera la firma:
Concatena el valor del encabezado
X-Mindsay-Timestampcon el cuerpo de la solicitudCalcula el hash hexadecimal de esta cadena utilizando el algoritmo estándar
HMAC-SHA256y la clave secreta compartida
Ejemplo
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:
acee24dc55838d04dbd879967dffda464f843799a9e6b14c97d9a2b908de6d85Esto se puede generar de la siguiente manera:
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);Puedes copiar y pegar este fragmento en una solicitud de Postman como un script previo a la solicitud