通过PHP SDK验证Facebook API访问令牌和用户ID?

 春370453095_241 发布于 2023-01-11 14:00

我在我的服务器上使用Facebook PHP SDK(v3.2.3,而不是v4.0)(https://developers.facebook.com/docs/reference/php/3.2.3)和Phonegap Facebook插件(Master )(https://github.com/phonegap/phonegap-facebook-plugin)手动安装在我的Phonegap v3.3.0 iOS应用程序中.

我已经完成了所有设置,应用程序显示了Facebook访问令牌和身份验证用户的"userID".问题是,Facebook令牌只持续约2个月.为了解决这个问题,我创建了一个表,其中包含了Facebook为我所有基于FB的用户提供的每个FB访问令牌.这适用于我的网站"使用Facebook登录"按钮!

...但是因为这个Phonegap插件让设备成为Facebook和我的数据库之间的中间人,我需要我的服务器直接用Facebook仔细检查以验证用户提供的用户ID和访问令牌是否真实.我已经看到我可以查询https://graph.facebook.com/app?access_token=TOKEN或做类似的事情:

GET /debug_token?
     input_token={input-token}&
     access_token={access-token}

...并且显然得到了我需要的一切,但我感觉攻击者可以继续点击我的PHP脚本,一遍又一遍地检查Facebook,直到他们找到成功 - 然后他们将拥有访问我的应用程序所需的凭据代表他们猜对象的那个用户.

如果攻击者在几周内猜测任何Facebook访问令牌的想法是荒谬的,请告诉我.但我希望将其缩小范围并迫使攻击者也知道他们猜测哪个用户访问令牌 - 这几乎不可能破解.那么如何验证用户使用用户访问令牌和用户的数字ID呢?

1 个回答
  • 每当您获得令牌并从Facebook使用用户ID查找您的用户时,从Facebook获取用户的Facebook ID.

    即使您的应用需要离线访问并且您使用已保存的令牌,也请在使用之前验证令牌.

    如果您未验证令牌,则如果用户退出Facebook或未经授权您的应用,您的应用仍可能正常运行.

    $facebook = new Facebook(array(
        'appId'  => <FACEBOOK_ID>,
        'secret' => <FACEBOOK_SECRET>,
    ));
    
    $facebook->setAccessToken($_REQUEST['access_token']);
    
    if (($userId = $facebook->getUser())) {
        // $_REQUEST['access_token'] is valid token for user with id $userId
    }
    

    2023-01-11 14:02 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有