Php Restful API-检查Facebook访问令牌是否有效并有权使用应用程序

Php Restful API-检查Facebook访问令牌是否有效并有权使用应用程序,php,facebook,rest,facebook-graph-api,restful-authentication,Php,Facebook,Rest,Facebook Graph Api,Restful Authentication,我正在构建一个restful API PHP来为iOS和Android应用程序服务,我想在这两个应用程序上实现facebook登录 该缺陷如下所示: 客户端ios或Android使用facebook登录,并向restful api发送访问令牌 验证access_令牌是否被授权使用该应用程序 若令牌有效,则从图形中获取用户数据。 合并帐户并为不同查询生成令牌。 出于安全目的,为了避免随机获得不属于我的应用程序的令牌,我想打一个测试电话来检查令牌是否经过授权且有效 我知道很多类似的问题可能已经得到了

我正在构建一个restful API PHP来为iOS和Android应用程序服务,我想在这两个应用程序上实现facebook登录

该缺陷如下所示:

客户端ios或Android使用facebook登录,并向restful api发送访问令牌 验证access_令牌是否被授权使用该应用程序 若令牌有效,则从图形中获取用户数据。 合并帐户并为不同查询生成令牌。 出于安全目的,为了避免随机获得不属于我的应用程序的令牌,我想打一个测试电话来检查令牌是否经过授权且有效

我知道很多类似的问题可能已经得到了回答,但没有一个能真正给我正确的答案,我也没有使用facebook graph的经验

我找到了这个解决方案:

https://graph.facebook.com/oauth/access_token?client_id=APP_ID&client_secret=SECRET_APP_ID&grant_type=fb_exchange_token&fb_exchange_token=ACCESS_TOKEN
不知怎的,这是行得通的。。它是否给我一个错误,或访问令牌字符串格式不是JSON,我不确定这是否是最好的测试方法


注意:我仍处于开发的早期阶段,如果您对我的流程有任何建议,请告诉我,我可能做得不对?

“随机”令牌无论如何都不会工作。Facebook发行的代币是加密的,因此API可以判断代币是真的还是随机的。最多你需要担心的是,用户可能会使用不同应用的令牌,或者他们自己授予的权限比你要求的多

只需使用您获得的访问令牌请求用户详细信息-如果由于有人试图“伪造”它而无效,那么API响应将告诉您这一点


文档中有一章是关于保护API请求的,也请检查一下:

“随机”令牌无论如何都不会工作。Facebook发行的代币是加密的,因此API可以判断代币是真的还是随机的。最多你需要担心的是,用户可能会使用不同应用的令牌,或者他们自己授予的权限比你要求的多

只需使用您获得的访问令牌请求用户详细信息-如果由于有人试图“伪造”它而无效,那么API响应将告诉您这一点


文档中有一章是关于保护API请求的,也可以查看一下:

什么适用于我的应用程序代码以及下面的解释

$fb = new Facebook\Facebook([
'app_id' => 'XXXXXXX',
  'app_secret' => 'XXXXXXX',
  'default_graph_version' => 'v2.5',
]);

// My app pulls users' access tokens & page ID from a database here and stores in $fb_access_token & $fb_page_id variables
$fb_access_token = 'YOU OR YOUR USERS ACCESS TOKEN GOES HERE';
$fb_page_id = 'ID OF FACEBOOK PAGE OR USER'; 

$fb->setDefaultAccessToken($fb_access_token);

// CHECK IF ACCESS TOKEN SITLL WORKS
try{
$page = $fb->get('/'.$fb_page_id.'?fields=id', $fb_access_token);
} catch(Facebook\Exceptions\FacebookResponseException $e) {
echo 'Graph returned an error: ' . $e->getMessage();
$graphError = 'Yes';
} catch(Facebook\Exceptions\FacebookSDKException $e) {
echo 'Facebook SDK returned an error: ' . $e->getMessage();
$sdkError = 'Yes';
}

// IF ACCESS TOKEN STILL WORKS...CONTINUE WITH SCRIPT. THIS PREVENTS ACCESS TOKEN FAILURE FROM BREAKING SCRIPT.
if(!isset($graphError) && !isset($sdkError)){
// CONTINUE WITH SCRIPT
}
说明:您正在使用有问题的访问令牌,并试图向Facebook API发出GET请求。只有在没有错误的情况下才能继续脚本的其余部分

您还可以在末尾添加ELSE语句,以便将用户重定向到一个页面,在该页面上,用户可以重新验证其帐户/访问令牌,具体取决于您的应用程序正在执行的操作

我的应用程序使用几个WHILE循环遍历我的用户数据库,并根据特定的列/单元格值,为他们发布到他们的Facebook页面

在此解决方案之前…当循环遇到无效的访问令牌时,它中断并没有为未经身份验证的用户后面的行执行脚本,因为它发出的请求失败


希望这对别人有帮助

什么适用于我的应用程序代码以及下面的解释

$fb = new Facebook\Facebook([
'app_id' => 'XXXXXXX',
  'app_secret' => 'XXXXXXX',
  'default_graph_version' => 'v2.5',
]);

// My app pulls users' access tokens & page ID from a database here and stores in $fb_access_token & $fb_page_id variables
$fb_access_token = 'YOU OR YOUR USERS ACCESS TOKEN GOES HERE';
$fb_page_id = 'ID OF FACEBOOK PAGE OR USER'; 

$fb->setDefaultAccessToken($fb_access_token);

// CHECK IF ACCESS TOKEN SITLL WORKS
try{
$page = $fb->get('/'.$fb_page_id.'?fields=id', $fb_access_token);
} catch(Facebook\Exceptions\FacebookResponseException $e) {
echo 'Graph returned an error: ' . $e->getMessage();
$graphError = 'Yes';
} catch(Facebook\Exceptions\FacebookSDKException $e) {
echo 'Facebook SDK returned an error: ' . $e->getMessage();
$sdkError = 'Yes';
}

// IF ACCESS TOKEN STILL WORKS...CONTINUE WITH SCRIPT. THIS PREVENTS ACCESS TOKEN FAILURE FROM BREAKING SCRIPT.
if(!isset($graphError) && !isset($sdkError)){
// CONTINUE WITH SCRIPT
}
说明:您正在使用有问题的访问令牌,并试图向Facebook API发出GET请求。只有在没有错误的情况下才能继续脚本的其余部分

您还可以在末尾添加ELSE语句,以便将用户重定向到一个页面,在该页面上,用户可以重新验证其帐户/访问令牌,具体取决于您的应用程序正在执行的操作

我的应用程序使用几个WHILE循环遍历我的用户数据库,并根据特定的列/单元格值,为他们发布到他们的Facebook页面

在此解决方案之前…当循环遇到无效的访问令牌时,它中断并没有为未经身份验证的用户后面的行执行脚本,因为它发出的请求失败


希望这对别人有帮助

“随机”代币无论如何都不起作用。只需使用您获得的访问令牌请求用户详细信息-如果由于有人试图“伪造”它而无效,则API响应会告诉您这一点。//文档中有一章是关于保护API请求的,去看看吧:太棒了!现在,我为我的服务器调用添加了一个appsecret_证明,它工作得非常完美。我认为随机令牌无法再工作了:D您可以添加您的注释作为答案,以便我可以接受它吗?谢谢:“随机”代币无论如何都不起作用。只需使用您获得的访问令牌请求用户详细信息-如果由于有人试图“伪造”它而无效,则API响应会告诉您这一点。//文档中有一章是关于保护API请求的,去看看吧:太棒了!现在我为我的服务器调用添加了一个appsecret_证明,它工作得非常好。我认为随机令牌不再有效了:D你能添加你的通信吗 我能接受这个答案吗?谢谢: