Node.js JSON解析错误

Ada*_*M-W 6 javascript json facebook parse-error node.js

我试图用node.js创建一个Facebook应用程序,但是我在检查已签名的请求时遇到了麻烦.每次我发出请求时,程序都会抛出一个SyntaxError:Unexpected token ILLEGAL:

undefined:1
":"721599476"}
              ^^
SyntaxError: Unexpected token ILLEGAL
Run Code Online (Sandbox Code Playgroud)

罪魁祸首功能如下:

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;
}
Run Code Online (Sandbox Code Playgroud)

仅用于测试,有效的signed_request将是

WGvK-mUKB_Utg0l8gSPvf6smzacp46977pTtcRx0puE.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImV4cGlyZXMiOjEyOTI4MjEyMDAsImlzc3VlZF9hdCI6MTI5MjgxNDgyMCwib2F1dGhfdG9rZW4iOiIxNTI1NDk2ODQ3NzczMDJ8Mi5ZV2NxV2k2T0k0U0h4Y2JwTWJRaDdBX18uMzYwMC4xMjkyODIxMjAwLTcyMTU5OTQ3NnxQaDRmb2t6S1IyamozQWlxVldqNXp2cTBmeFEiLCJ1c2VyIjp7ImxvY2FsZSI6ImVuX0dCIiwiY291bnRyeSI6ImF1In0sInVzZXJfaWQiOiI3MjE1OTk0NzYifQ
Run Code Online (Sandbox Code Playgroud)

为什么我在有效JSON时出现此错误并且仅使用静态字符串JSON将正常工作,是否有任何提示可以解决此问题?

谢谢.

Ada*_*M-W 1

好吧,经过一些测试,我自己解决了这个问题,很抱歉这个问题被浪费了。

我的 base64 库中的某些内容无法正确解码字符串(尽管看起来是这样 - 所以它一定是非显示字符或填充等)

我已经改为https://github.com/kriszyp/commonjs-utils/blob/master/lib/base64.js,它适合我的目的,尽管需要修改以支持base64url解码而不是普通的base64,并且它现在似乎工作正常。

  • 抱歉,我在发布时尝试过,但 stackoverflow 告诉我我必须等待 3 天。 (3认同)