Facebook Javascript API调用返回需要appsecret_proff参数的错误,但这是客户端

Facebook Javascript API call returns error requiring appsecret_proof argument - but this is client side

本文关键字:错误 参数 客户端 proff 调用 API Javascript 返回 appsecret Facebook      更新时间:2023-09-26

我正在使用Facebook的Javascript SDK,但它返回错误:

来自服务器的API调用需要appsecret_proff参数

我很熟悉为什么它会通过PHP在服务器端返回这个错误,但这是客户端javascript,我不明白为什么它会返回这个错误。

剥离代码如下:

window.fbAsyncInit = function () {
        FB.init({
            appId: [my app id],
            xfbml: true,
            version: 'v2.2'
        });
    };
    (function (d, s, id) {
        var js, fjs = d.getElementsByTagName(s)[0];
        if (d.getElementById(id)) {
            return;
        }
        js = d.createElement(s);
        js.id = id;
        js.src = "//connect.facebook.net/en_US/sdk.js";
        fjs.parentNode.insertBefore(js, fjs);
    }(document, 'script', 'facebook-jssdk'));
FB.login(function (res) {
        if (res.authResponse) {
                if (res.authResponse.grantedScopes.indexOf("manage_pages") >= 0) {
                    FB.api('/me/accounts', function (res) {
                        if (res && !res.error) {
                            /*
                             * Should show pages available for 
                             * the facebook user to manage ...
                             * (code removed)
                             */
                        }
                        else {
                            /*
                             * Instead, shows 'API calls from the 
                             * server require an appsecret_proof
                             * argument" error here
                             */
                            console.log("Error /me/accounts: " + JSON.stringify(res.error));
                        }
                    });
                }
        }
    });

如果我在Facebook应用程序设置中关闭"服务器API调用的应用程序秘密证明",这很好,但出于安全原因,我希望启用此功能。

这不应该通过javascript调用失败-这是客户端API调用,而不是错误消息所描述的服务器API调用。

这是Facebook的一个bug,还是我在某个地方遗漏了什么?

截至2018年2月,该问题(或非常类似的问题)似乎再次出现。有一个错误报告:

https://developers.facebook.com/bugs/1597942793626594/

也就是说,对于启用了要求应用程序机密的应用程序,在编写时,似乎无法在不传递appsecret_proof的情况下从Javascript执行API调用。


其他注意事项:

摘录自文件:

启用此功能后,我们将只允许API调用包括appsecret_proof或由颁发令牌的同一设备制成至.

但是,在应用程序设置>高级>安全>要求应用程序机密中,描述如下:

仅允许来自服务器的呼叫,并且需要应用程序机密或应用程序机密所有API调用的证明。

相关错误报告:2016年10月,2015年2月。

相关SO文章:来自服务器的API调用需要appsecret_proff参数。