首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >facebook图形接口node.js无效的appsecret_proof

facebook图形接口node.js无效的appsecret_proof
EN

Stack Overflow用户
提问于 2018-01-21 20:46:24
回答 2查看 1.2K关注 0票数 1

这是我的第一篇文章,所以请不要对我太苛刻!

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

一切似乎都正常,除了我收到GET请求的响应消息说我的appsecret_proof无效。

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

代码语言:javascript
运行
复制
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);
    }
);

我得到的错误是:

代码语言:javascript
运行
复制
{ message: 'Invalid appsecret_proof provided in the API argument',
  type: 'GraphMethodException',
  code: 100,
  fbtrace_id: 'H3pDC0OPZdK' }

我已经在开发人员页面上重置了我的appSecret和accessToken,并在重置后立即尝试了它们。我得到了同样的错误,所以我不认为过时的凭证是问题所在。我的

代码语言:javascript
运行
复制
 console.log(FB.options()) 

返回一个适当的外观对象,该对象也如预期的那样包含appSecretProof的长哈希。我还在选项中使用了许多版本号(v2.4、v2.5、v2.11,并且没有任何版本密钥)来尝试此代码。Facebook在这方面的文档让我感到有些不清楚。我认为我应该使用SDK的v2.5 ( node包旨在模仿它),并向图形API的v2.11发出请求,但是?无论如何,这似乎不能解释我所遇到的问题。当我根本没有指定任何版本号时,我会得到一个非常好的响应,告诉我我的appSecretProof是无效的。

fb的节点包应该会为我生成这个appSecretProof,看起来它就是这样做的。根据软件包文档,我的其他信息和语法似乎都是正确的。这里我漏掉了什么?提前感谢你们所有人。

EN

回答 2

Stack Overflow用户

发布于 2018-01-22 13:14:15

看起来你需要在你的应用程序的高级设置中进行双因素授权的appsecret_proof。

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

您可以通过将appsecret_proof参数添加到来自服务器的每个应用程序接口调用,并启用该设置以要求所有调用都提供证明,从而防止出现这种情况。这可以防止坏人从他们的服务器使用您的访问令牌进行API调用。如果您使用的是官方PHP SDK,则会自动添加appsecret_proof参数。

请参考下面的url生成有效的appsecret_proof,并将其添加到每个接口调用

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

票数 2
EN

Stack Overflow用户

发布于 2020-05-24 02:32:21

在使用passport-facebook-token时,我不得不处理同样的问题,我最终发现这个问题与我的代码库逻辑或应用程序配置无关。

我之所以出现这个错误,是因为我故意向请求中添加了一个authorization头。因此,如果您使用postman或其他http客户端,只需确保请求不包含任何authorization报头。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48366926

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档