2010-12-20 21 views
6

Estoy intentando hacer una aplicación de Facebook con node.js, sin embargo, tengo problemas para verificar las solicitudes firmadas. Cada vez que hago una petición, el programa lanza una SyntaxError: símbolo inesperado ILEGAL como tal:Node.js Error de análisis JSON

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

La función culpable es a continuación:

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; 
} 

sólo para las pruebas, un signed_request válida sería

WGvK-mUKB_Utg0l8gSPvf6smzacp46977pTtcRx0puE.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImV4cGlyZXMiOjEyOTI4MjEyMDAsImlzc3VlZF9hdCI6MTI5MjgxNDgyMCwib2F1dGhfdG9rZW4iOiIxNTI1NDk2ODQ3NzczMDJ8Mi5ZV2NxV2k2T0k0U0h4Y2JwTWJRaDdBX18uMzYwMC4xMjkyODIxMjAwLTcyMTU5OTQ3NnxQaDRmb2t6S1IyamozQWlxVldqNXp2cTBmeFEiLCJ1c2VyIjp7ImxvY2FsZSI6ImVuX0dCIiwiY291bnRyeSI6ImF1In0sInVzZXJfaWQiOiI3MjE1OTk0NzYifQ 

¿Por qué recibo este error cuando es JSON válido y el simple uso de una cadena estática de JSON no tendrán ningún problema, y ​​si existen algún consejo para arreglar esto?

Gracias.

+1

encoded_data [1] = { "algoritmo": "HMAC-SHA256", "expira": 1292821200, "issued_at": 1292814820, "oauth_token": "152549684777302 | 2.YWcqWi6OI4SHxcbpMbQh7A __ 3600,1292821200-721599476 | Ph4fokzKR2jj3AiqVWj5zvq0fxQ"," usuario ": {" locale ":" en_GB "," country ":" au "}," user_id ":" 721599476 "} – Jason

Respuesta

1

Ok, después de un poco de pruebas he solucionado el problema yo mismo, lo siento por la pregunta desperdiciada.

Algo en mi biblioteca de base 64 no se decodifica correctamente la cadena (aunque parecía ser - por lo que debe haber sido un personaje no mostrar o relleno, etc.)

he cambiado a https://github.com/kriszyp/commonjs-utils/blob/master/lib/base64.js que se adapta a mis propósitos, aunque necesitaba ser modificado para soportar la decodificación base64url en lugar de la base64 normal, y parece funcionar bien ahora.

+0

es posible que desee marcar esta pregunta como respondida :) :) – Vanwaril

+3

lo siento, lo intenté cuando lo publiqué pero stackoverflow me dijo que tenía que esperar 3 días. –

+0

¿Sería genial si pudieras compartir tus modificaciones? –