2010-12-20 45 views
6

我正在嘗試使用node.js製作Facebook應用程序,但是我在檢查簽名請求時遇到了麻煩。每次我提出一個要求,程序拋出一個語法錯誤:意外的令牌非法這樣:Node.js JSON解析錯誤

undefined:1 
":"721599476"} 
       ^^ 
SyntaxError: Unexpected token ILLEGAL 

罪魁禍首功能如下:

function parse_signed_request(signed_request, secret) { 
    encoded_data = signed_request.split('.',2); 
    // decode the data 
    sig = encoded_data[0]; 
    json = base64url.decode(encoded_data[1]); 
    data = JSON.parse(json); // ERROR Occurs Here! 

    // check algorithm - not relevant to error 
    if (!data.algorithm || data.algorithm.toUpperCase() != 'HMAC-SHA256') { 
     console.error('Unknown algorithm. Expected HMAC-SHA256'); 
     return null; 
    } 

    // check sig - not relevant to error 
    expected_sig = crypto.createHmac('sha256',secret).update(encoded_data[1]).digest('base64').replace(/\+/g,'-').replace(/\//g,'_').replace('=',''); 
    if (sig !== expected_sig) { 
     console.error('Bad signed JSON Signature!'); 
     return null; 
    } 

    return data; 
} 

只是用於測試,有效signed_request會

WGvK-mUKB_Utg0l8gSPvf6smzacp46977pTtcRx0puE.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImV4cGlyZXMiOjEyOTI4MjEyMDAsImlzc3VlZF9hdCI6MTI5MjgxNDgyMCwib2F1dGhfdG9rZW4iOiIxNTI1NDk2ODQ3NzczMDJ8Mi5ZV2NxV2k2T0k0U0h4Y2JwTWJRaDdBX18uMzYwMC4xMjkyODIxMjAwLTcyMTU5OTQ3NnxQaDRmb2t6S1IyamozQWlxVldqNXp2cTBmeFEiLCJ1c2VyIjp7ImxvY2FsZSI6ImVuX0dCIiwiY291bnRyeSI6ImF1In0sInVzZXJfaWQiOiI3MjE1OTk0NzYifQ 

爲什麼我得到這個錯誤,當它是有效的JSON和簡單地使用JSON的靜態字符串將正常工作,並在那裏任何提示來解決這個問題?

謝謝。

+1

encoded_data [1] = { 「算法」: 「HMAC-SHA256」, 「過期」:1292821200, 「issued_at」:1292814820, 「組oauth_token」: 「152549684777302 | 2.YWcqWi6OI4SHxcbpMbQh7A __ 3600.1292821200-721599476 | Ph4fokzKR2jj3AiqVWj5zvq0fxQ」,」 user「:{」locale「:」en_GB「,」country「:」au「},」user_id「:」721599476「} – Jason 2010-12-20 03:25:33

回答

1

好吧,經過一些測試,我已經自己解決了這個問題,對於浪費的問題感到抱歉。

東西在我的base64庫不是字符串解碼正確(儘管它似乎是 - 所以它必須是一個非顯示字符或填充等),我已經改變到https://github.com/kriszyp/commonjs-utils/blob/master/lib/base64.js

它適合我的目的,雖然需要修改以支持base64url解碼而不是普通的base64,現在看起來工作正常。

+0

您可能想將此問題標記爲回答:) – Vanwaril 2011-01-05 07:19:11

+3

對不起,張貼它,但stackoverflow告訴我,我不得不等待3天。 – 2011-01-08 08:14:02

+0

如果您可以分享您的修改,會很棒嗎? – 2012-06-14 09:39:08