我有一个服务器应用程序,它从客户端接收用户访问令牌并生成appsecret_proof。我想进行图形API调用,以验证收到的访问令牌是否有效:
curl \
-F 'access_token=<my access token>' \
-F 'appsecret_proof=<my appsecret_proof>' \
https://graph.facebook.com/me
但是,当我省略appsecret_proof字段时,仍然会验证请求。在这两种情况下,答案都是:
{"success":true}
如果我故意传递无效的appsecre_proof,它会按预期工作:
{"error":{"message":"Invalid appsecret_proof provided in the API argument","type":"GraphMethodException","code":100}}
我在高级设置中进行了必要的更改:
根据Facebook文档:&#34;启用此功能后,我们将仅允许包含appsecret_proof的API调用,或者从发出令牌的同一设备发出的API调用。&#34; &#34;一旦您更改了该设置,攻击者就无法在不访问您的应用秘密的情况下使用被盗访问权限。&#34;
我在这里缺少什么?
答案 0 :(得分:3)
appsecret_proof 与 APP SECRET KEY 不同。 基于FB文档,这是它需要获得的方式:
您可以将此生成的HMAC用作我的 appsecret_proof (例如): -
curl \
-F 'access_token=<my access token>' \
-F 'appsecret_proof=<my appsecret_proof>' \
-F 'batch=[{"method":"GET", "relative_url":"me"},{"method":"GET", "relative_url":"me/friends"}]'
https://graph.facebook.com/me
省略appsecret_proof字段可能有所帮助,但在某些地区,FB API要求它,这就是你需要提供它的方式