【问题标题】:Client-side photo access with access_token, using Facebook graph使用 access_token 的客户端照片访问,使用 Facebook 图表
【发布时间】:2012-12-02 09:38:18
【问题描述】:

我有一个应用程序,其中包括显示用户 Facebook 帐户中的一些照片。我目前正在使用 fb_graph gem 来执行此操作(这是一个 Ruby 项目)。

我可以获取 URL 没有问题,但我不知道的是,如果用户退出他们的 Facebook 帐户,他们是否能够看到这些照片,显示在我的页面上。 URL 看起来像:http://sphotos-d.ak.fbcdn.net/hphotos-ak-prn1/<id>.jpg

不过,有一个明显的解决方法。我可以将我为用户拥有的访问令牌附加到 URL 上,因此他们拥有与我一样查看照片的相同权限:``http://sphotos-d.ak.fbcdn.net/hphotos-ak-prn1/.jpg?access_token=`。

http://developers.facebook.com/docs/authentication/client-side/ 这样的问题建议使用access_token 客户端应该是最后的手段,但我认为我必须这样做(因为并非所有照片都会公开)。

这个问题Facebook access token: server-side vs client-side flows 说因为我在服务器端获取令牌,所以它会持续 60 天。所以我要小心我如何使用它。

那么有两个问题:这对查看照片有用吗?有没有更好的方法不暴露access_token

【问题讨论】:

  • 也很想知道我是否误解了,事实上我根本不需要access_token,但可以在没有它的情况下显示图像,我的用户将能够看到他们。这在本地对我有用,但我想了解它是否适​​用于生产环境。

标签: facebook facebook-graph-api facebook-access-token


【解决方案1】:

在任何情况下都不要将访问令牌放在您页面上任何内容的 URL 中,否则您从第三方网站提取的任何资源都会在引荐来源标头中暴露用户的访问令牌

您从 API 中检索到的照片 URL 应该可以直接访问而无需访问令牌

【讨论】:

    【解决方案2】:

    您可以访问https://sphotos-a.xx.fbcdn.net/hphotos-ash3/168119_10150146071831729_5116892_n.jpg 吗?我认为你可以那是因为它在 facebook cdn 上。您获得此链接并非偶然。为了进行此步骤,您需要使用访问令牌和“user_photos”权限(您似乎已经在这样做)访问用户的相册和照片。

    从技术上讲,您在生产中应该没问题(除非 facebook 更改其 cdn url,这似乎不太可能)。

    编辑
    忘了提。公开用户的访问令牌不是好的做法(如 Igy 提到的)。 黑客仍然需要您的应用 ID 和客户端密码才能使用访问令牌进行恶意操作,但您不想承担不必要的风险。阅读this 问题了解更多详情。

    【讨论】:

    • 我可以访问那个链接——你能解释一下这证明了什么吗?您是说该 URL 是您的 access_token 生成的临时 URL?除非您可以扩展您的解释,否则这张照片也可能只是一张公开的照片。谢谢。
    • 1)这证明您可以在没有令牌的情况下访问fb cdn url。 2)URL 不是临时的(直到 fb 更改 cdn 位置)并且不会根据访问令牌更改 3)考虑专辑 ID 451318416382(这是我的个人私人专辑)。没有我的访问令牌,您无法访问它directly。现在考虑一张来自同一相册here 的照片。你可以访问它吗?这证明如果你有指向它的链接,你不需要访问令牌来访问 fb cdn 中的 url。
    • 攻击者只需要访问令牌即可造成破坏;在任何情况下不要在文档源中拥有访问令牌
    • 是的,我的立场是正确的。伊格是对的。请参阅this 问题。我会更新我的答案。
    【解决方案3】:

    我还没有正确理解这个问题。

    对于像:http://sphotos-d.ak.fbcdn.net/hphotos-ak-prn1/blah 这样的资源,它们是静态 url,不会时不时地改变,它们不需要访问令牌供其他人查看。你需要一个 access_token 来获取 url。

    客户端生成的令牌有效期为 60 天,或者称为延长到期访问令牌,您显然 must not 暴露令牌会危及用户的安全。

    我错过了您问题的任何部分吗?

    【讨论】:

      猜你喜欢
      • 2012-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-28
      • 1970-01-01
      • 2016-12-19
      • 1970-01-01
      相关资源
      最近更新 更多