2017-02-17 85 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');