gpt4 book ai didi

javascript - 如何在 Javascript 中正确生成 Facebook Graph API 应用程序 secret 证明

转载 作者:行者123 更新时间:2023-11-27 23:26:54 24 4
gpt4 key购买 nike

我正在对 all_mutual_friends 边缘进行服务器端 Facebook Graph API 调用:https://developers.facebook.com/docs/graph-api/reference/user-context/all_mutual_friends/

当两个用户是 friend 时,该调用有效,但当他们不是 friend 时,该调用不会返回任何有用的数据。根据文档,这是因为我必须使用 appsecret_proof 参数对调用进行签名。无论我尝试什么,我都无法成功传递此参数。我正在使用在 Parse 上运行的 jsrsasign 。我已经尝试了使用访问 token 作为消息和我的appSecret作为 key 的所有配置,反之亦然。我还尝试了 utf8 和 hex 的多种组合。每次我收到错误:API 参数中提供的 appsecret_proof 无效

代码:

  var Signer = require("cloud/vendor/jsrsasign/lib/jsrsasign.js");
var userId = request.params.userId;
var accessToken = request.params.accessToken;
var appSecret = "redactedStringPastedFromFacebook";

var signer = new Signer.Mac({alg: "hmacsha256", pass: appSecret});
var appSecretString = signer.doFinalString(accessToken);
var appSecretHex = signer.doFinalHex(accessToken);

var graphRequestURL = "https://graph.facebook.com/v2.5/" + userId;
var fields = "?fields=context.fields(all_mutual_friends.fields(name,picture.width(200).height(200)))";
//var authorization = "&access_token=" + accessToken; //this works, but only for existing friends
var authorization = "&access_token=" + accessToken + "&appsecret_proof=" + appSecretHex;
return Parse.Cloud.httpRequest({
url: graphRequestURL + fields + authorization,
method: "GET",
})

我见过的大多数示例都是用 PHP 或 Python 编写的,并且加密例程更加清晰。这是因为 appSecretStringappSecretHex 都不会抛出错误并且看起来很合理,但这些值始终会被 Facebook 拒绝。

注释:

  • 我已经三次检查了 Facebook 提供的 App Secret 值
  • Facebook 已批准我使用 all_mutual_friends 功能,这是此特定通话的要求
  • 我使用的是 Parse,它不是 Node,并且无法使用具有外部依赖项的 NPM 模块,这就是我使用 jsrsasign 的原因。我还尝试直接使用 CryptoJS,但它不再维护,并且没有适当的模块支持,并且 jsrsasign 似乎无论如何都会包装它。

最佳答案

这里是:

  import CryptoJS from 'crypto-js';

const accessToken = <your_page_access_token>;
const clientSecret = <your_app_client_secret>;
const appsecretProof = CryptoJS.HmacSHA256(accessToken, clientSecret).toString(CryptoJS.enc.Hex);

关于javascript - 如何在 Javascript 中正确生成 Facebook Graph API 应用程序 secret 证明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34897289/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com