O Laiye Chatbot verifica a existência e a validade do X-Mindsay-Signature cabeçalho HTTP para validar a autenticidade da solicitação. Para isso, o Laiye Chatbot e seu parceiro compartilham uma chave secreta (configurada durante a integração).
O parceiro do Laiye Chatbot deve gerar uma assinatura ao solicitar a API. A API do Laiye tenta gerar a mesma assinatura do seu lado e verifica se ela corresponde à assinatura fornecida no X-Mindsay-Signature cabeçalho HTTP.
Para evitar ataques de repetição, a API do Laiye também valida se o X-Mindsay-Timestamp não está muito distante no passado (tolerância de 5 minutos).
Veja como gerar a assinatura:
Concatene o valor no cabeçalho
X-Mindsay-Timestampcom o corpo da solicitaçãoCalcule o hash hexadecimal desta string usando o algoritmo padrão
HMAC-SHA256e a chave secreta compartilhada
Exemplo
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:
acee24dc55838d04dbd879967dffda464f843799a9e6b14c97d9a2b908de6d85Isso pode ser gerado da seguinte forma:
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);Você pode copiar e colar este trecho em uma solicitação do Postman como um script de pré-solicitação