2016-03-11 3 views
4

убер documentation говорятКак проверить веб-сайт uber?

Значение этого поля является шестнадцатеричным HMAC подпись тела запроса webhook HTTP, используя секрет клиента в качестве ключа и SHA256 в качестве хэш-функции.

Но что такое тело запроса HTTP? Я предполагаю, что это тело JSON, полученное от webhook (https://developer.uber.com/docs/webhooks#section-example-post).

Если это так, то как проверить его в NodeJS, поскольку крипто-модуль для HMAC не принимает JSON [я пытался подстроить JSON, но он генерирует другой хеш]. Или как преобразовать JSON в буфер, так как это следующий лучший вариант.

Если нет, то что я должен использовать?

[Update1] Код, используемый для выполнения этой задачи:

app.post("/",function(req,res){ 
const crypto = require('crypto'); 
var input = res.body 
var str_input=JSON.stringify(input) 

const hmac = crypto.createHmac('sha256', '<CLIENT SECRET>'); 

hmac.update(str_input); 
console.log(hmac.digest('hex')); // print same as below 
console.log("e034ac7db29c3c0c10dfeced41a6cd850ed74c1c3c620863d47654cc7390359a") 
}) 
+1

Вы правы, что 'JSON.stringify (req.body)' - это то, что вы должны передавать своей хеширующей функции. Можете ли вы включить код для своей хэш-функции в вопрос? –

+0

@AndrewNoonan Я добавил код для того же – rkc88

+0

. Можете ли вы опубликовать окончательный код? Я добавил замену ответа на свой код как: 'var input = JSON.stringify (req.body) .replace (/ \ // g, '\\' + '/');' но это не сработало. Подпись Uber не совпадает с заголовком. – gaskbr

ответ

4

Обновлено Ответ

Uber рассмотрел вставку обратного слэша в webhook органов об ошибке и выпустила исправление. Обходной путь ниже будет нарушать сравнения. По состоянию на 4/28/2016 клиенты, написанные в узле, должны просто выполнить сравнение без изменения тела веб-камеры. Клиенты на языках, которые не разделяют поведение Узел в игнорировании черных пятен в escape-последовательностях, не затрагиваются.

Оригинал ответа

JS ignores the backslash when reading escape sequences in a string. Отсутствующая обратная косая черта нарушает ваше сравнение, потому что она включена в сигнатуры событий webhook.

Непосредственным решением является повторная установка этих обратных косых черт с использованием регулярного выражения.

var reconstitutedWebhookBody = input.replace(/\//g, '\\' + '/');

Это регулярное выражение необходимо будет расширить, если webhooks когда-либо начать в том числе других персонажей возможность выхода.

+0

Впервые я столкнулся с этой проблемой в JS. Спасибо за ваш ответ! – rkc88

+0

Просим вас выслать окончательный код? Я добавил замену ответа на свой код как: 'var input = JSON.stringify (req.body) .replace (/ \ // g, '\\' + '/');' но это не сработало. Подпись Uber не совпадает с заголовком. – gaskbr

0

У меня была та же проблема. Uber отправляет json с пробелами перед ключами и значениями. Нравится

 
{"event_id": "...", "resource_href": "...", "meta": {"status": "...", "rider_id": "...", "user_id": "...", "resource_id": "..."}, "event_type": "...", "event_time": ...} 

Вы можете сделать это до активации борипарса. И создайте hex из этих данных

app.use(function (req, res, next) { 

let data = ""; 
req.on('data', function(chunk){data += chunk}); 
req.on('end', function(){ 
    req.jsonBody = JSON.parse(data); 
    req.rawBody = data; 
    req.originalUberReq = data; 
}); 
next(); 
}); 
Смежные вопросы