移动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。我假设这也将解决我的问题。如果情况并非如此,将编辑答案,但对于我来说,问题已得到解答。
什么是更新?他们的API仍然有旧的文档,我遇到了与人类API类似的问题。 – yangmillstheory
对我来说这是一个专门针对Moves的问题。也许问一个新问题并在此发布链接?很高兴看到我是否能发现一些东西:) – martwetzels
谢谢@martwetzels。我会发布,但它基本上是http://stackoverflow.com/questions/29947400/hmac-sha1-digest-in-python的重复。 – yangmillstheory