2016-10-05 3 views
0

데이터 집계 서비스 (소비)가 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>) 

을 통해 (신체 타임 스탬프 및 넌스 때문에) 내 해시 함수가 자주 일치하기 때문에 해싱 함수가 올바른 것으로 추론합니다. 아무도 왜 일부 해시 불일치를 볼 수 있습니까? 자세한 정보가 필요하면 알려주십시오.

답변

0

분명히 Moves API 설명서가 최신 버전이 아닙니다. 2014 년에 v1 API가 사용되지 않으며 문서를 제대로 업데이트하지 않고 1.1로 이전했습니다. 이것도 내 문제를 해결할 것이라고 가정합니다. 그렇지 않은 경우 대답을 편집하지만 나에게 질문에 대한 답을 얻을 것입니다.

+0

업데이트는 무엇입니까? API에는 여전히 이전 문서가 있지만 Human API와 비슷한 문제가 있습니다. – yangmillstheory

+0

나를 위해 그것은 특별히 Moves와 관련된 문제였습니다. 아마도 새로운 질문을하고 여기에 링크를 게시 하시겠습니까? 내가 뭔가를 발견 할 수 있다면 행복해. :) – martwetzels

+0

Thanks @martwetzels. 나는 게시 할 것이지만 기본적으로 http://stackoverflow.com/questions/29947400/hmac-sha1-digest-in-python의 복제본이다. – yangmillstheory

관련 문제