【问题标题】:What are the potential problems with exposing the Facebook API secret?暴露 Facebook API 机密有哪些潜在问题?
【发布时间】:2010-02-11 04:32:20
【问题描述】:

我正在写一个little web utility,将状态更新发布到 Twitter 和/或 Facebook。这涉及使用这两种服务创建“应用程序”,以获取 API 密钥和“秘密”。

我的问题是,我真的需要如何保护这些秘密——为了让它完全发挥作用,您似乎需要秘密与服务的身份验证部分进行交互,以授予应用访问您的帐户的权限,并且/或授予它代表您发布更新的权限。 Facebook 的文档说要保护机密,但至少 one other Facebook utility 在源中分发 API 密钥和机密。

请务必注意:这不是在 Facebook 上下文中运行的标准 Facebook“应用程序”,也不是标准的“桌面”式编译应用程序——它是一个旨在运行的基于 Web 的应用程序在您自己的网络服务器上。这样做的受众可能很少,而且比一般人更复杂——因此,一种技术替代方案是要求人们获取自己的 API 密钥和秘密才能使用该应用程序。然而,这似乎需要做很多工作,并且对于任何使用它的人来说都是一个相当大的障碍。

如果我将秘密和 API 密钥都放在我的应用程序的配置中并将其签入 Github 以供全世界查看,是否有人知道或了解我会让自己陷入什么样的麻烦?

【问题讨论】:

    标签: facebook


    【解决方案1】:

    有权访问您的密钥的任何人都可以完全控制您的应用程序。此页面显示了他们可以使用admin.setAppProperties API call 更改的所有管理员设置。这可能包括将应用程序置于开发者模式(因此其他人无法使用它)、更改回调 URL(这会破坏它)或其他各种恶作剧。

    我不确定我是否完全理解您想要做什么,但我认为如果您查看 session secrets 的文档,那么您可能会找到一个不涉及嵌入应用程序密钥但仍然存在的解决方案让用户与 API 交互。 Facebook Connect 使用会话密钥,并允许在没有应用程序密钥的情况下进行 API 调用。 API calls that can be made with a session secret 往往仅限于用户与他们自己的数据交互。更新状态和授予权限绝对是您可以通过会话机密、Connect 和XFBML 的组合来完成的事情。

    正如 Paul 已经回答的那样:分享您的应用程序机密违反了 Facebook 的服务条款。

    【讨论】:

      【解决方案2】:

      您将违反许可您使用 facebook API 的协议。该协议的一部分是您将密钥保密。如果您不这样做,他们将禁止您访问,直到您同意遵守规则。

      政策 III.7 非常明确:

      您不得将您的密钥提供给另一方,除非该方是代表您作为您的应用程序运营商行事的代理,但您不得将您的密钥提供给广告网络。您应对在您的帐户标识符下发生的所有活动负责。

      http://developers.facebook.com/policy/

      让您的每个用户都获得一个 API 密钥,或者重新考虑您的架构。您不希望 facebook 终止您的访问权限,而且注册 API 密钥老实说也不算什么工作。

      【讨论】:

        【解决方案3】:

        如果您正在开发一个软件供其他人在他们自己的网络服务器上使用,那么每个使用它的网站都应该注册为一个单独的应用程序。这样,用户将能够控制授予您代码的每个实例的访问权限,而不是授予对使用它的所有 Web 服务器的访问权限或不授予任何权限。

        创建一个新应用并不难。直接去http://www.facebook.com/developers/createapp.php

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-03-12
          • 1970-01-01
          • 2018-08-04
          • 1970-01-01
          • 2010-09-14
          • 1970-01-01
          • 2011-03-14
          • 1970-01-01
          相关资源
          最近更新 更多