Ruby facebook图api appsecret_proof

时间:2017-03-20 14:58:37

标签: ruby facebook facebook-graph-api

如何使用Ruby为facebook graph api创建appsecret_proof?

Facebook在here中有一个例子。我还在这个PHP中看到了红宝石中的一个例子。

OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), <app_secret>, <user_access_token>)

但是我收到了Invalid appsecret_proof provided in the API argument

从facebook示例中不清楚$app_access_token是什么,应用程序ID是什么?

如何在ruby中创建appsecret_proof

更新代码:

secret = OpenSSL::HMAC.hexdigest('SHA256', ENV["FACEBOOK_SECRET_ID"], app_token)
dct = {
  'access_token' => current_profile.oauth_token,
  'appsecret_proof' => secret,
  'fields' => "context.fields(all_mutual_friends)"
}
url = "https://graph.facebook.com/v2.5/" + friend.uid + "/"

resp = HTTPClient.get(url, dct)

2 个答案:

答案 0 :(得分:1)

这是我的代码:

  hmac = OpenSSL::HMAC.new(FB_SECRET, OpenSSL::Digest::SHA256.new)
  hmac << access_token
  proof = hmac.hexdigest
  param_hash[:appsecret_proof] = proof

其中FB_SECRET是32位(在我的情况下)随机字符串。

在大多数情况下,access_token是用户的登录身份验证令牌(我假设您为current_profile.oauth_token)。此令牌必须与您的应用相关联。如果要使用您应用的凭据而不是用户的凭据进行API调用,则可以使用"#{FB_APP_ID}|#{FB_SECRET}"作为访问令牌。

cf https://developers.facebook.com/docs/facebook-login/access-tokens

答案 1 :(得分:0)

我找到了另一种为 Facebook 生成appsecret_proof的方法:

OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), <app_secret>, <user_access_token>)

摘录自此gist thread