[英]Restful API - Check if Facebook access token is valid and authorized to use APP
我正在构建一个宁静的API(PHP)以为iOS和Android应用程序提供服务,我想在这两个应用程序上实现facebook登录。
缺陷如下:
为了安全起见,避免获得不属于我的APP的随机令牌,我想进行一次测试调用以检查令牌是否经过授权和有效?
我知道可能已经回答了许多类似的问题,但是没有一个问题能给我正确的答案,而且我对Facebook图形没有真正的经验。
我找到了这个解决方案:
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),我不确定这是否是测试的最佳方法。
注意:我仍处于开发的早期阶段,如果您对我的流程有任何建议,请告诉我,我做事的方式可能不正确?
适用于我的应用程序的代码(下面解释的代码)...
$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页面中...
在此解决方案之前……当循环遇到无效的访问令牌时,它“中断”并且未执行“未经身份验证的用户”之后的行的脚本,因为它发出了失败的请求。
希望这对某人有帮助!
无论如何,“随机”令牌将无法工作。 (Facebook发行的令牌是经过加密的,因此API可以告诉您令牌是真实的,还是仅仅是“随机的”。至多,您需要担心用户可能将令牌用于其他应用程序,或者他们会使用哪种令牌。自己授予的权限比您要求的要多。)
只需使用您获得的访问令牌请求用户详细信息-如果由于有人试图“伪造”访问令牌而无效,则该API响应将告诉您。
该文档有一章关于保护API请求的章节,也请检查一下: https : //developers.facebook.com/docs/graph-api/securing-requests
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.