移动API声明:哈希不匹配特定用户

问题描述:

我们的数据聚合服务(消费)正在利用Moves API Storyline Notifications,我们正在核实由以下文件生成的与我们自己移到提供的哈希值。我们有几个用户测试服务,大多数用户的哈希匹配移动请求的签名(散列)。但是,某些用户的通知会导致哈希值不匹配。在Moves的Google网上论坛中,描述了user_id长度限制JSON.parse()的一个问题,但在我们的例子中,所有userIds的长度都是相同的。移动API声明:哈希不匹配特定用户

低于该验证散列函数:(我保持的console.log()■在代码中显示哪些参数是由我们选中)

function verifyMovesHash(req, res) { 
    let obj = JSON.stringify(req.body) + req.get('x-moves-timestamp') + req.get('x-moves-nonce') 
    console.log('Obj Moves', obj) 
    console.log('Moves headers', req.headers) 
    let hmac = crypto.createHmac('sha1', '<CLIENT SECRET>').update(obj).digest('base64') 
    console.log('HMAC Consume: ', hmac) 
    console.log('Signature Moves: ', req.get('x-moves-signature')) 

    if (hmac === req.get('x-moves-signature')) { 
     signJWTandSendToCollect(req, res) 
    } else { 
     console.log('Moves hash-mismatch for user: ', req.body.userId) 
    } 
} 

这些是不成功的哈希值比较日志:(删除了一些可识别的信息)。

0|Consume | Obj Moves {"userId":19017159843919340,"storylineUpdates":[{"reason":"DataUpload","startTime":"20161004T204819Z","endTime":"20161005T080135Z","lastSegmentType":"place","lastSegmentStartTime":"20161004T204819Z"},{"reason":"ActivityUpdate","startTime":"20161004T185932Z","endTime":"20161004T190703Z"}]}1475654517rBdrok/CNYZoInpMmKl2+A== 
0|Consume | Moves headers { 'x-real-ip': '54.209.46.155', 
0|Consume | 'x-forwarded-for': '54.209.46.155', 
0|Consume | 'x-nginx-proxy': 'true', 
0|Consume | host: 'xxx', 
0|Consume | connection: 'close', 
0|Consume | 'content-length': '289', 
0|Consume | 'content-type': 'application/json; charset=utf-8', 
0|Consume | 'x-moves-signature': 'i5cRuKzEV0U/sRP18RIYn8wIaJ4=', 
0|Consume | 'x-moves-timestamp': '1475654517', 
0|Consume | 'x-moves-nonce': 'rBdrok/CNYZoInpMmKl2+A==', 
0|Consume | accept: '*/*', 
0|Consume | 'user-agent': 'Moves API' } 
0|Consume | HMAC Consume: 0LBJaRrsG6JfLOd1QbEC6kG2PqI= 
0|Consume | Signature Moves: i5cRuKzEV0U/sRP18RIYn8wIaJ4= 
0|Consume | Moves hash-mismatch for user: 19017159843919340 

这是一次成功的:

0|Consume | Obj Moves {"userId":18926285641764670,"storylineUpdates":[{"reason":"DataUpload","startTime":"20161005T071824Z","endTime":"20161005T080056Z","lastSegmentType":"place","lastSegmentStartTime":"20161005T071824Z"}]}1475654470dBPm0K1YBFreuaSrE0Z1Tg== 
0|Consume | Moves headers { 'x-real-ip': '54.209.46.155', 
0|Consume | 'x-forwarded-for': '54.209.46.155', 
0|Consume | 'x-nginx-proxy': 'true', 
0|Consume | host: 'xxx', 
0|Consume | connection: 'close', 
0|Consume | 'content-length': '201', 
0|Consume | 'content-type': 'application/json; charset=utf-8', 
0|Consume | 'x-moves-signature': 'XmJEVdRlREGjx1m1xm7mKi0pjxY=', 
0|Consume | 'x-moves-timestamp': '1475654470', 
0|Consume | 'x-moves-nonce': 'dBPm0K1YBFreuaSrE0Z1Tg==', 
0|Consume | accept: '*/*', 
0|Consume | 'user-agent': 'Moves API' } 
0|Consume | HMAC Consume: XmJEVdRlREGjx1m1xm7mKi0pjxY= 
0|Consume | Signature Moves: XmJEVdRlREGjx1m1xm7mKi0pjxY= 

obj的移动是哈希的内容,为移动的规定:(使身体时间戳和随机数)

HMAC_SHA1(<your client secret>,<request body>|<timestamp>|<nonce>) 

通过我推理哈希函数是正确的,因为它经常匹配。任何人都可以看到为什么有些哈希不匹配?如果需要更多信息,请告诉我。

显然,移至API文档是不是最新的。在2014年,v1 API已被弃用,并且在没有正确更新文档的情况下将其移至1.1。我假设这也将解决我的问题。如果情况并非如此,将编辑答案,但对于我来说,问题已得到解答。

+0

什么是更新?他们的API仍然有旧的文档,我遇到了与人类API类似的问题。 – yangmillstheory

+0

对我来说这是一个专门针对Moves的问题。也许问一个新问题并在此发布链接?很高兴看到我是否能发现一些东西:) – martwetzels

+0

谢谢@martwetzels。我会发布,但它基本上是http://*.com/questions/29947400/hmac-sha1-digest-in-python的重复。 – yangmillstheory