2010-02-11 27 views
13

我在写一个little web utility,向Twitter和/或Facebook发布状态更新。这涉及使用这两种服务创建“应用程序”以获取API密钥和“秘密”。公开Facebook API秘密的潜在问题是什么?

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

重要的是要注意:这不是您在Facebook上下文中运行的标准Facebook“应用程序”,也不是标准的“桌面”风格的编译应用程序 - 它是一个基于Web的应用程序,旨在成为在您自己的Web服务器上运行。对此的观众可能很小,比平均水平稍高一些 - 所以,一种技术选择是要求人们获得他们自己的API密钥和秘密来使用应用程序。然而,这似乎有很多工作要做,而且对于任何使用这种方法的人来说都是一个相当大的障碍。

如果我把我的应用程序的配置中的秘密和API密钥都放入配置中,并将它检入Github以供所有人查看,任何人都知道我有什么样的麻烦,

+0

+1非常好的问题 – Sarfraz

回答

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的服务条款。

4

你会违反你的协议,授权你使用Facebook API。该协议的一部分是你保存你的关键秘密。如果你不这样做,他们会禁止你的访问,直到你同意遵守规则。

政策III.7是很清楚的:

你不能给你的密钥给另一方,除非一方当事人在采取行动以您的名义为您的应用程序的运营商代理,但你绝不能将您的密钥交给广告网络。您对所有在您的帐户标识符下发生的活动负责。

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

让您的每位用户得到一个API密钥,或重新考虑你的架构。您不希望Facebook终止您的访问权限,并且注册API密钥实际上不是那么多工作。

0

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

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

相关问题