API 参数中提供的 appsecret_proof 无效

Posted

技术标签:

【中文标题】API 参数中提供的 appsecret_proof 无效【英文标题】:Invalid appsecret_proof provided in the API argument 【发布时间】:2014-01-24 20:54:43 【问题描述】:

我在我的 Facebook 帐户中创建了一个应用程序,并使用我的访问令牌 (php) 向我的朋友发布了帖子。

但其他用户无法使用我的应用 ID 和密码向他们的朋友发帖并收到错误消息

我禁用了

我的应用设置中要求的应用机密证明

请问有什么解决办法吗?

public function facebookUsershare()  
require '../facebook/src/facebook.php'; $facebook = new Facebook(array( 'appId' => 'app     id', 'secret' => 'secret_key', )); 

$privacy = array( 'description' => 'Vladimir Sergeevich', 'value' => 'CUSTOM', 'friends'   =>'friend id' 'allow' => 'loged in user' );
try 
$result = $facebook->api('/me/feed', 'POST', array( "access_token" => 'access_token',   'picture' => "path to image", 'link' => "gmail.com";, 'name' => "Go wi6 7", 'caption' =>   "capn", 'privacy' => json_encode($privacy) ));

echo 'Successfully posted to Facebook Personal Profile'; //return $facebookfrndids;    catch(Exception $e)  
echo $e->getMessage(); 
return false;  

【问题讨论】:

您应该编辑您的问题,而不是在评论中发布代码。 【参考方案1】:

终于找到答案了…… 在app的高级设置中禁用Required app secret proof,并在base_facebook.php sdk中注释以下代码

if (isset($params['access_token'])) 
  $params['appsecret_proof'] = $this->getAppSecretProof($params['access_token']);

【讨论】:

你不应该这样做。更新你的 php sdk 文件。 从 SDK v4.0.11 开始,您可以使用FacebookSession::enableAppSecretProof(false); 来控制这个 你要么使用 FacebookSession::enableAppSecretProof(false);或者您在 Facebook 应用程序控制台中打开需要应用程序秘密证明。使用官方 facebook SDK 时无需执行任何操作,只要在 Web 服务器中正确设置 facebook 应用程序密码即可。 在应用程序的高级设置中禁用所需的应用程序秘密证明,如果您没有它或它为空白 - 对我有用【参考方案2】:

至于documentation:

可以从客户端或代表您的服务器进行图形 API 调用 的客户。来自服务器的调用可以通过添加 名为 appsecret_proof 的参数。

所以你需要指定额外的参数appsecret_proofaccess_tokenappsecret_proofaccess_token 的数字签名,使用您的应用程序密码签名。签名需要确认access_token。要获得appsecret_proof,您需要像这样计算签名:

secret = 'app secret'
token = 'access token'
digest = OpenSSL::Digest.new('sha256')
proof = OpenSSL::HMAC.digest(digest, secret, token)

# result params:
"access_token=#token&appsecret_proof=#proof"

这个例子是关于 Ruby 语言的,但这不是语言问题。请参考您的语言手册以参考 hmac 签名 api。

【讨论】:

我应该在哪里通过这个appsecret_proof。我正在使用 php。 togater with access_token,在请求正文中

以上是关于API 参数中提供的 appsecret_proof 无效的主要内容,如果未能解决你的问题,请参考以下文章

调用 API:如何提供这些参数(密钥、随机数和签名)

您应该为 Windows API 调用 VerQueryValue 提供哪些参数

springcloud提供开放api接口签名验证

反射API提供的常用类和函数

API设计与开发之最佳实践

如何将 Json Serializer 配置为在 web api 中为输入和输出参数提供单独的日期转换器?