是否可以从客户端向Facebook Graph API发送请求而不向公众公开我们的访问令牌?

时间:2013-01-10 03:15:54

标签: facebook facebook-graph-api facebook-oauth facebook-access-token app-secret

我的问题与this question有关,但并非完全相同。

我目前正在开发一个商业目录网站(类似于Yelp),其中企业拥有自己的网页。我们称这个应用为DIRECTORY_APP

企业可能希望在我们目录中托管的页面上显示最新的Facebook状态更新。让我们假装我们有一个名为BIZ_1的公司。假设这些页面是公共页面。

显然,Facebook Graph API可用于此目的。所以我可以向Facebook发送请求以检索BIZ_1的最新状态更新:

https://graph.facebook.com/BIZ_1_PROFILE_ID/posts?
        access_token=DIRECTORY_APP_ACCESS_TOKEN
        &callback=callbackName

但是,如果我从客户端使用此功能,我们的网站访问令牌将向公众公开,因此这不是一个合理的解决方案。

现在在aforementioned question中,Anatoly提到我们可以通过先发送此请求来检索访问令牌:

https://graph.facebook.com/oauth/access_token?
        client_id=YOUR_APP_ID&client_secret=YOUR_APP_SECRET
        &grant_type=client_credentials

但是,如果有人检查网络日志,这也会暴露我们网站的访问令牌(这是正确的还是这是一种不同类型的访问令牌?)。此解决方案还暴露了我们网站的应用程序秘密(这样安全吗?)。

总而言之,在不要求浏览用户首次登录Facebook的情况下,我可以从客户端检索网页的最新状态更新的安全方式是什么?

3 个答案:

答案 0 :(得分:0)

  

我可以从客户端检索网页的最新状态更新,而不会要求浏览用户首次登录Facebook

如果没有登录,你就无法做到这一点。

我猜访问令牌暴露。

答案 1 :(得分:0)

这里的聪明伎俩可能是使用社交插件。 Like Box会做你想要的,没有任何问题。但是,它并没有很大的可定制性。即便如此,也可以在页面上看起来很漂亮!

它还会跳过您提到的任何登录问题。

答案 2 :(得分:0)

我在一些谷歌搜索后找到了答案。简而言之,答案是否定的。

以下是Facebook的摘录:

安全最佳实践

App Secret和App Access Token

App Secret用于某些Login流程以生成访问令牌,而Secret本身旨在确保您的应用程序仅用于受信任的用户。该秘密可用于轻松创建可以代表应用程序的任何用户发出API请求的应用程序访问令牌,这使得应用程序机密不会受到损害至关重要。

因此,App Secret或应用程序访问令牌不应包含在任何可由应用程序开发人员以外的任何人访问的代码中。这适用于所有不受保护的代码方法,如客户端代码(如HTML或Javascript)或可反编译的本机应用程序(如iOS,Android或Windows桌面应用程序)。

我们建议您只能直接在应用服务器上使用App Access令牌,以提供最佳安全性。对于本机应用程序,我们建议应用程序与您自己的服务器通信,然后服务器使用App Access令牌向Facebook发出API请求。因此,如果App Dashboard中“高级设置”下的“App Type”设置为Native / Desktop,我们假设您的本机应用程序包含二进制文件中的App Secret或App Access Token,并且我们不允许使用应用程序访问令牌继续。 API的行为就像没有提供访问令牌一样。

如果您的App Secret遭到入侵,您应立即在App Dashboard的基本设置中重置它。