暴露Facebook API秘密有哪些潜在问题?

时间:2010-02-11 04:32:20

标签: facebook

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

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

重要的是要注意:这不是在Facebook环境中运行的标准Facebook“应用程序”,也不是标准的“桌面”式编译应用程序 - 它是一个基于Web的应用程序,旨在运行在您自己的Web服务器上。这方面的受众可能很小,而且比平均水平更复杂 - 因此,一种技术替代方案是要求人们获得自己的API密钥以及使用该应用程序的秘密。然而,这似乎是很多工作,并且任何使用它的人都有相当大的障碍。

如果我将秘密和API密钥放在我的应用程序的配置中并将其检入Github以供全世界查看,那么任何人都知道或有任何洞察我自己会遇到什么样的麻烦?< / p>

3 个答案:

答案 0 :(得分:8)

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

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

正如保罗已经回答的那样:分享你的申请秘密是违反Facebook的服务条款的。

答案 1 :(得分:4)

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

政策III.7非常明确:

  

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

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

让您的用户各自获得API密钥,或重新考虑您的架构。您不希望Facebook终止您的访问权限,并且注册API密钥实际上并不是那么有效。

答案 2 :(得分:0)

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

创建新应用并不难。只需转到http://www.facebook.com/developers/createapp.php