JSFiddle - React, Tailwind, and code Playground

by sqren

JavaScript

function parse_signed_request(signed_request, secret) {
  var signed_request_array = signed_request.split('.');
    var encoded_sig = signed_request_array[0];
    var payload = signed_request_array[1];

  // decode the data
  var sig = atob(encoded_sig);
  var data = atob(payload);

  // error
  if (JSON.parse(data).algorithm.toUpperCase() !== 'HMAC-SHA256') {
    return null;
  }

  // check sig
  var expected_sig = require("crypto").createHmac('SHA256', 'secret').update('payload').digest('base64');
    
  // error
  if (sig !== expected_sig) {
    return null;
  }

  return data;
}

parse_signed_request( "DOMFfnnAOOFEULGukrMbbXw1Fj1cTJnSNt8DGRAmQ6Y.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImNvZGUiOiIyLkFRRDhCU2JGV084MmFnRFouMzYwMC4xMzQ1NjA0NDAwLjEtNjQxODcwMjY0fHpkeFIxcDByMEgzb1pRekxURlZEbmNXX1YwbyIsImlzc3VlZF9hdCI6MTM0NTYwMDYxMSwidXNlcl9pZCI6IjY0MTg3MDI2NCJ9", "ced9f215768727d6bb10eefcc11ba5de");