2012-12-02 95 views
0

我有一个应用程序,其中包括显示用户的Facebook帐户的一些照片。我目前使用fb_graph gem来做到这一点(这是一个Ruby项目)。客户端访问access_token,使用Facebook图

我可以得到的URL没有问题,但我无法解决的是用户是否能够看到这些照片,显示在我的页面上,如果他们从他们的Facebook帐户注销。网址如下所示: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

+0

也很想知道我是否误会了,实际上我根本不需要'access_token',只需显示没有它的图像,我的用户就可以看到它们。这在当地适用,但我想了解它是否能在生产中使用。 – Hbcdev

回答

0

不要在任何情况下将其在内容的任何URL的访问令牌您的网页上,或从第三方网站在拉任何资源将在来源标题

的URL你暴露用户的访问令牌从API检索照片应该可以直接访问而不需要访问令牌

0

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

从技术上讲,你应该罚款生产(除非Facebook更改其cdn网址,这似乎不太可能)。

编辑
忘了提。暴露用户的访问令牌并不是很好的做法(就像Igy提到的那样)。 黑客仍需要您的应用程序ID和客户端密码才能使用访问令牌执行恶意操作,但您不想冒不必要的风险。阅读this问题了解更多详情。

+0

我可以访问该链接 - 你能解释一下这证明什么吗?你是说那个URL是由你的access_token生成的临时URL吗?这张照片也可能只是一张公开照片,除非您可以扩展您的解释。谢谢。 – Hbcdev

+0

1)这证明你可以访问没有令牌的fb cdn url。 2)该URL不是临时的(直到fb改变了cdn位置)并且不会根据访问令牌改变3)考虑专辑ID“451318416382”(这是我的个人私人相册)。没有我的访问令牌,您无法直接访问[https://graph.facebook.com/451318416382/photos]。现在考虑来自同一张专辑的照片[这里](https://sphotos-b.xx.fbcdn.net/hphotos-prn1/s600x600/39788_451319376382_4181668_n.jpg)。你可以访问它吗?这证明你不需要访问令牌来访问fb cdn中的url,如果你有链接的话。 –

+0

攻击者只需访问令牌就可以造成损坏;做**不**在任何情况下都有访问令牌的文档来源 – Igy

0

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

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

客户端生成的令牌有效期为60天或被称为“扩展到期访问令牌”,并且显然must not会通过暴露令牌来威胁用户的安全。

我想念你的问题的任何部分?