6

node.jsを使用してFacebookアプリケーションを作成しようとしていますが、署名されたリクエストをチェックするのに問題があります。リクエストを行うたびに、プログラムはSyntaxError:UnexpectedtokenILLEGALをスローします。

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の静的文字列を使用するだけで正常に機能するのに、なぜこのエラーが発生するのですか?これを修正するためのヒントはありますか?

ありがとう。

4

1 に答える 1

1

OK、少しテストした後、問題を自分で修正しました。無駄な質問で申し訳ありません。

私のbase64ライブラリの何かが文字列を適切にデコードしていませんでした(ただし、そうであるように見えました-したがって、非表示の文字またはパディングなどであったに違いありません.)

https://github.com/kriszyp/commonjs-utils/blob/master/lib/base64.jsに変更しましたが、通常の base64 ではなく base64url デコードをサポートするように変更する必要がありましたが、これは私の目的に適しています。今はうまくいくようです。

于 2010-12-20T03:38:46.653 に答える