2017-02-17 59 views
-1

出於某種原因,我不能做這項工作保護尤伯杯網絡掛接不工作

require crypto = require('crypto') 

const hmac = crypto.createHmac('sha256', 'clientSecret') 
const hash = hmac.update(JSON.stringify(req.body)).digest('hex') 

if (hash !== req.header('X-Uber-Signature')) { 
    return res.json('something is wrong ' + hash + ' ' + req.header('X-Uber-Signature')) 
} 

return res.json('you got in!') 

我在這裏的下一條指令https://developer.uber.com/docs/riders/guides/webhooks#security

但哈希生成不同的值

的其他方法同樣歡迎。

+0

什麼是您所期望的價值是什麼?你得到什麼? –

回答

1

這裏是Python中的工作實現來驗證網絡掛接:

import hmac 
import hashlib 

# Compute hmac sha256 signature from payload + client secret 
digester = hmac.new(
    UBER_CLIENT_SECRET, 
    request.data, 
    hashlib.sha256 
) 

# Parse json post data 
event = request.get_json(force=True) 

# Validate webhook signature for our app 
if request.headers.get('X-Uber-Signature') == digester.hexdigest(): 
    pass 
+0

這是如何解決這個問題的?這是一個node.js問題! – gaskbr

0

我有同樣的問題。優步在鍵和值之前使用空格發送json。像這樣

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

你可以在激活boryparser之前做到這一點。而從這個數據創造六角

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(); 
}); 

然後

const hash = crypto.createHmac('sha256', secret) 
.update(req.originalUberReq) 
.digest('hex');