Ошибка синтаксического анализа Node.js JSON

Я пытаюсь создать приложение Facebook с помощью node.js, однако у меня возникают проблемы с проверкой подписанных запросов. Каждый раз, когда я делаю запрос, программа выдает SyntaxError: Unexpected token ILLEGAL как таковой:

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 будет работать нормально, и есть ли какие-либо советы, как это исправить?

Спасибо.


person Adam M-W    schedule 20.12.2010    source источник
comment
encoded_data [1] = {Алгоритм: HMAC-SHA256, истекает: 1292821200, issued_at: 1292814820, oauth_token: 152549684777302 | __ 2.YWcqWi6OI4SHxcbpMbQh7A 3600.1292821200-721599476 | Ph4fokzKR2jj3AiqVWj5zvq0fxQ, пользователь:. {языковой стандарт: en_GB, страна: аи}, user_id: 721599476}   -  person Jason    schedule 20.12.2010


Ответы (1)


Хорошо, после небольшого тестирования я сам решил проблему, извините за пустой вопрос.

Что-то в моей библиотеке base64 не декодировало строку должным образом (хотя казалось, что это должно быть неотображаемый символ или дополнение и т. д.)

Я перешел на https://github.com/kriszyp/commonjs-utils/blob/master/lib/base64.js, который подходит для моих целей, хотя его необходимо изменить для поддержки декодирования base64url, а не обычного base64, и теперь он работает нормально.

person Adam M-W    schedule 20.12.2010
comment
извините, я пробовал это, когда публиковал это, но stackoverflow сказал мне, что мне нужно подождать 3 дня. - person Adam M-W; 08.01.2011
comment
Было бы здорово, если бы вы могли поделиться своими изменениями? - person Rudolf Meijering; 14.06.2012
comment
Не уверен, о каких модификациях вы спрашиваете, и, честно говоря, я не помню, это было около 2 лет назад, и я уверен, что все изменилось бы. Посмотрите github.com/heroku/facebook-template-nodejs, чтобы получить запускается с Facebook API, если это то, что вы делаете, в противном случае base64url должен быть таким же, как обычный base64 с заменой строки для специальных символов. - person Adam M-W; 14.06.2012