facebook graph api node.js appsecret_proof

时间:2018-01-21 12:46:24

标签: javascript node.js facebook facebook-graph-api

这是我的第一篇文章,所以请放轻松我!

我是一名使用javascript和node.js的开发人员。我正在尝试从节点js文件向facebook的图形API发出基本请求。我已经使用我的Facebook帐户注册了他们的开发者服务,我已经在这里找到了FB的节点包(https://www.npmjs.com/package/fb)。它看起来很官方。

一切似乎都在起作用,除了我收到对我的GET请求的回复,并显示一条消息,说我的appsecret_proof无效。

这是我正在使用的代码(请注意敏感信息只是键盘糖化)。

let https = require("https");
var FB = require('fb');

FB.options({
    version: 'v2.11',
    appId: 484592542348233,
    appSecret: '389fa3ha3fukzf83a3r8a3f3aa3a3'
});


FB.setAccessToken('f8af89a3f98a3f89a3f87af8afnafmdasfasedfaskjefzev8zv9z390fz39fznabacbkcbalanaa3fla398fa3lfa3flka3flina3fk3anflka3fnalifn3laifnka3fnaelfafi3eifafnaifla3nfia3nfa3ifla');

console.log(FB.options());

FB.api('/me',
    'GET',
    {
        "fields": "id,name"
    },
    function (res) {
        if(!res || res.error) {
            console.log(!res ? 'error occurred' : res.error);
            return;
        }
        console.log(res);
        console.log(res.id);
        console.log(res.name);
    }
);

我得到的错误是:

{ message: 'Invalid appsecret_proof provided in the API argument',
  type: 'GraphMethodException',
  code: 100,
  fbtrace_id: 'H3pDC0OPZdK' }

我已经在开发者页面上重置了我的appSecret和accessToken,并在重置后立即尝试了。我得到了同样的错误,所以我不认为陈旧的凭据是问题所在。我的

 console.log(FB.options()) 

返回一个适当的查找对象,该对象还包含appSecretProof的长哈希值。我也尝试过这个代码,在选项中有许多版本号(v2.4,v2.5,v2.11,没有任何版本密钥)。关于这个的Facebook文档让我感到有点不清楚。我想我应该使用SDK的v2.5(节点包是为了模仿它)并向图API的v2.11发出请求,但是???无论如何,这似乎无法解释我所拥有的问题。我得到了一个非常好的回复,当我没有指定任何版本号时,我的appSecretProof无效。

fb的节点包应该为我生成这个appSecretProof,看起来它正在这样做。根据包文档,我的其他信息和语法似乎都是正确的。我在这里错过了什么?非常感谢你们。

2 个答案:

答案 0 :(得分:1)

看起来您已经在应用中的高级设置中要求使用appsecret_proof进行2因素授权。

访问令牌是便携式的。可以通过Facebook的SDK获取在客户端上生成的访问令牌,将其发送到服务器,然后代表客户端从该服务器进行调用。访问令牌也可能被个人计算机上的恶意软件或中间人攻击中的人窃取。然后,该访问令牌可以从完全不同的系统使用,该系统不是客户端而不是您的服务器,会产生垃圾邮件或窃取数据。

您可以通过将 appsecret_proof 参数添加到来自服务器的每个API调用并启用该设置来要求所有调用的证明来阻止此操作。这可以防止坏人通过他们的服务器访问令牌进行API调用。如果您使用的是官方PHP SDK,则会自动添加appsecret_proof参数。

请参阅以下网址以生成有效的appsecret_proof,并将其添加到每个API呼叫

https://developers.facebook.com/docs/graph-api/securing-requests

答案 1 :(得分:0)

在与passport-facebook-token一起工作时,我不得不处理相同的问题, 我终于发布了该问题与我的代码库或应用程序配置的逻辑无关。

我有这个错误,只是因为我故意向请求中添加了一个授权标头。因此,如果您使用的是邮递员或其他一些HTTP客户端,只需确保请求中不包含任何授权标头即可。