데이터 집계 서비스 (소비)가 Moves API Storyline Notifications을 사용 중이며 문서에 따라 생성 된 자체 테스트와 함께 Moves에서 제공 한 해시를 확인하고 있습니다. 우리는 여러 사용자가 서비스를 테스트하고 대부분의 사용자의 해시가 Moves 요청의 서명 (해시)과 일치합니다. 그러나 일부 사용자의 알림은 해시가 일치하지 않게됩니다. Moves의 Google 그룹스에서는 JSON.parse() 개의 userId 길이에 대한 제한 사항이 설명되어 있지만 모든 userId는 동일한 길이입니다. 해시를 확인하는 기능 아래 API 알림 이동 : 해시가 일치하지 않는 특정 사용자
:이은 실패 해시 비교에 대한 로그입니다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)
}
}
를 (I 매개 변수는 우리에 의해 확인되는 것을 보여주기 위해 코드에서을 console.log()의 유지) : (식별 가능한 일부 정보가 삭제되었습니다.)
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
이 성공 하나입니다 이동에 의해 명시된대로 obj가 이동
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=
해시에 대한 내용입니다 :
HMAC_SHA1(<your client secret>,<request body>|<timestamp>|<nonce>)
을 통해 (신체 타임 스탬프 및 넌스 때문에) 내 해시 함수가 자주 일치하기 때문에 해싱 함수가 올바른 것으로 추론합니다. 아무도 왜 일부 해시 불일치를 볼 수 있습니까? 자세한 정보가 필요하면 알려주십시오.
업데이트는 무엇입니까? API에는 여전히 이전 문서가 있지만 Human API와 비슷한 문제가 있습니다. – yangmillstheory
나를 위해 그것은 특별히 Moves와 관련된 문제였습니다. 아마도 새로운 질문을하고 여기에 링크를 게시 하시겠습니까? 내가 뭔가를 발견 할 수 있다면 행복해. :) – martwetzels
Thanks @martwetzels. 나는 게시 할 것이지만 기본적으로 http://stackoverflow.com/questions/29947400/hmac-sha1-digest-in-python의 복제본이다. – yangmillstheory