Код аутентификации сообщений Instamojo в проблеме сравнения веб-перехватчиков
Я интегрирую платежный шлюз INSTAMOJO в свое приложение. Я использую проверку MAC для ответа webhooks с сайта INSTAMOJO. Доступный учебник только для Php и Python. Но я реализую это с помощью NodeJs (ExpressJs). Я прикрепил свой код ниже. Таким образом, ожидается, что проблема HashCode и рассчитанный HashCode не совпадают, любезно просмотрите мой код и документацию INSTAMOJO.
func(req, res){
body= req.body
{mac}=body
delete body.mac
const instaCredentials= {key:***********, secret:*********, webhooks:********}
const bodyKeys= Object.keys(body).map(key => key);
const sortedKeys = bodyKeys.sort()
const values = sortedKeys.map(key => {
const value = body[key];
return value.toLowerCase();
});
let message = values.join('|');
const secret = instaCredentials.webhooks
let calculatedMac= cryptoJs.HmacSHA1(message, secret)
calculatedMac = expectedMac.toString();
console.log(mac,calculatedMac)
}
0 ответов
Попробуй это
const CryptoJS = require('crypto-js');
function verifyHmac(
receivedHmac, // received in Kindly-HMAC request header
dataString, // received in request body (stringified JSON)
key // shared secret, known by your service
) {
const generatedHmac = CryptoJS.HmacSHA256(dataString, key);
const generatedHmacBase64 = CryptoJS.enc.Base64.stringify(generatedHmac);
return generatedHmacBase64 === receivedHmac;
}
// test the function
const receivedHmac = "uEeD0Q7eW9btdx6LFvvlpwkzQBWdbknsQkg1C27Cx7Q=";
const dataString = '{"foo":1,"bar":2}';
const key = "examplekey";
if (!verifyHmac(receivedHmac, dataString, key)) {
throw new Error("HMAC did not authenticate");
}