【问题标题】:Verify Facebook API Access Token & UserID via PHP SDK?通过 PHP SDK 验证 Facebook API 访问令牌和用户 ID?
【发布时间】:2014-07-26 23:01:51
【问题描述】:

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

我已经很好地设置了所有内容,该应用程序显示了 Facebook 访问令牌和身份验证用户的“用户 ID”。问题是,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 来验证用户呢?

【问题讨论】:

    标签: php ios facebook facebook-graph-api cordova


    【解决方案1】:

    在您获得令牌时从 Facebook 获取用户 Facebook ID,并使用来自 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
    }
    

    【讨论】:

    • 是的,只要用户做任何事情与 Facebook 进行交互,我都会检查以确保令牌有效且处于活动状态,并且一切...谢谢
    【解决方案2】:

    您不必担心攻击者猜测访问令牌。访问令牌长 211 个字符,由大约 62 种字符组成(基于我的令牌)。那是 62^211 唯一的访问令牌。世界上只有 70 亿人,所以几乎不可能暴力破解访问令牌。尽管如此,这种攻击是 FB 的责任,以生成更好的 access_token。

    假设访问令牌泄露给了犯罪分子: 如果您建议与用户的 FB 数字 id 进行比较——不要!可以使用访问令牌访问 id。相反,当他们第一次注册或其他东西时,将您自己的唯一 ID/用户名分配给用户。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-04
      • 2015-12-10
      • 2012-05-17
      • 1970-01-01
      • 1970-01-01
      • 2015-12-20
      相关资源
      最近更新 更多