如何在Javascript中正确生成Facebook Graph API应用程序秘密证明
How to properly generate Facebook Graph API App Secret Proof in Javascript
我正在对all_mutual_friends
边缘进行服务器端Facebook Graph API调用:https://developers.facebook.com/docs/graph-api/reference/user-context/all_mutual_friends/
当两个用户是好友时,调用有效,但当他们的用户不是好友时,不会返回任何有用的数据。根据文档,这是因为我必须使用 appsecret_proof
参数对调用进行签名。无论我尝试什么,我都无法成功传递此参数。我正在使用在Parse上运行的jsrsasign。我已经尝试了使用access token
作为消息和我的appSecret
作为密钥的所有配置,反之亦然。我还尝试了 utf8 和十六进制的多种组合。每次收到错误时: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,加密例程更清晰一些。这在appSecretString
和appSecretHex
都不会抛出错误并且看起来合理,但是这些值总是被Facebook拒绝。
笔记:
- 我已经三重检查了Facebook提供的应用程序密钥值
- 我已获得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);
相关文章:
- 实施Facebook's无用户身份验证的Graph API
- 如何将Facebook Graph API响应存储为Javascript数组
- 如何使用访问令牌与Facebook Graph API
- Facebook-Can't提交新的Open Graph类型,提交为灰色.如何提交
- Facebook Graph API帖子带有标记选项
- Facebook Graph API-#4错误-已达到应用程序请求限制
- Javascript Facebook Open Graph: Post to wall?
- 通过服务器调用Graph API来构建我自己的Facebook帖子数据库
- facebook graph API:无法获取用户好友列表
- Appcelerator Titanium:Facebook Graph API 空好友列表
- 使用 facebook graph API 在 facebook 上通过 URL 发布视频
- 使用 URL 查询字符串动态显示 Facebook Open Graph
- 使用 Facebook Graph API 搜索用户
- 如何通过Facebook Graph Api获取用户的朋友在生日时发布在用户墙上的帖子
- Facebook与javascript FB Graph api的集成 墙上的帖子 Firefox 中的未知错误
- Facebook Open Graph故事中的多个对象
- graph.facebook 获取名称和链接并发送到数据库
- 我可以使用Facebook Graph API访问用户的好友状态吗?
- 如何检查用户是否通过Open Graph Facebook订阅其他用户
- https://graph.facebook.com/me/albums有时什么也不回