签名错误的JSON签名! parseSignedRequest PHP SDK 3.1.1 Facebook

时间:2012-02-19 11:10:13

标签: facebook

我的应用程序的连续重定向问题基本上是请求基本用户信息,例如姓名,性别和位置。 在我决定打开base_facebook.php并跟踪流程之前,我经历了太多头痛。我最终评论了if块,该块检查 $ sig 是否与parseSignedRequest函数中的 $ expected_sig 匹配。该应用程序运行良好,并显示了有关我的基本信息。不过我想知道这样做是否安全?!!!为什么$ expected_sig与$ sig不匹配任何帮助将不胜感激

 protected function parseSignedRequest($signed_request) {
     list($encoded_sig, $payload) = explode('.', $signed_request, 2);

     // decode the data
     $sig = self::base64UrlDecode($encoded_sig);
     $data = json_decode(self::base64UrlDecode($payload), true);

    if (strtoupper($data['algorithm']) !== 'HMAC-SHA256') {
      self::errorLog('Unknown algorithm. Expected HMAC-SHA256');
      return null;
    }

    // check sig
    $expected_sig = hash_hmac('sha256', $payload,
                          $this->getAppSecret(), $raw = true);

    var_dump($expected_sig);
    echo '<br/><br/><br/>';
    var_dump($sig);
    // if ($sig !== $expected_sig) {
    //   self::errorLog('Bad Signed JSON signature!');
    //   return null;
    // }

    return $data;
 }

2 个答案:

答案 0 :(得分:2)

我遇到了类似的问题,发现在调用

时提供正确的配置参数是我的错误

$ facebook = new Facebook($ config);

答案 1 :(得分:1)

出于安全考虑,这一点至关重要。它验证请求是来自facebook,因为只有fb,你知道应用程序的秘密。

实际上,唯一可以解决这个问题的变量是facebook app secret或者对signed_request进行某种修改。我在测试时遇到了同样的问题,因为我复制了签名的错误请求。一定要仔细检查一切。