Я пытаюсь защитить мою реализацию Zoho webhook. Я следовал за этим делом c: https://www.zoho.com/subscriptions/kb/webhooks/securing-webhooks.html
Мне не очень понятно, что делать, но я уверен, что в конце концов я все же сделал все что они сказали.
У меня нет параметров запроса. Формат по умолчанию JSON полезная нагрузка НЕТ X- WWW-FORM-URLENCODED.
Я пытался с помощью следующего кода, но я не получил правильный ха sh. Также неясно, должен ли я сортировать полезную нагрузку по умолчанию или нет. Согласно этому ответу, это необходимо только для параметров, закодированных в форме URL, и параметров запроса, но для простого JSON полезная нагрузка не требуется. В любом случае я пробовал оба способа с последующей реализацией в результате:
function computeZohoSignature(query, payload) {
return crypto
.createHmac('sha256', process.env.ZOHO_WEBHOOK_SECRET)
.update(JSON.stringify(payload), 'utf8')
.digest('hex');
}
function validSignature(signatureHash, computedHash) {
return signatureHash.length === computedHash.length
&& crypto.timingSafeEqual(Buffer.from(signatureHash), Buffer.from(computedHash));
}
Я также пытался обернуть полезную нагрузку следующей функцией:
function sortObjectByKeys(object) {
if (!isObject(object)) return object;
const sortedObj = {};
Object
.keys(object)
.sort()
.forEach((k) => {
sortedObj[k] = sortObjectByKeys(object[k]);
});
return sortedObj;
}
Сортировка работает правильно, и я даже пытался просто отсортировав "root -ключи". Неважно, что я пытаюсь, ха sh никогда не бывает прежним. И ДА Я на 100% уверен, что секрет верен, я трижды проверил это.
Кто-нибудь видит, что здесь не так, или у него есть рабочая NodeJS реализация этого?
Спасибо в заранее!