如何开源使用API​​密钥的应用程序

对于一个宠物项目,我开发了一个桌面应用程序,它需要来自几个不同的Web服务的API密钥。

我一直在努力准备这个应用程序,使其成为开源的,并且解决了用这些密钥做什么的问题。

问题是这样的:我的理解是,这些API密钥对任何使用该应用程序或查看/修改源代码的人都是不可见的。 从Web服务的最后,这些API密钥用于标识访问其API的应用程序,并根据需要允许/阻止使用。 在TOS的大部分接收这些密钥的地方,实际上明确指出密钥不能与世界共享。

目前,我所有的密钥都是硬编码的,但在处理开放源码应用中的私钥情况方面,我处于一个僵局:

– 如果密钥保持硬编码,那么只要我的源代码被公开就可以看到。

– 我不能真的用代码分配中的键来省略源文件,因为那样它就不能编译。 这在技术上解决了这个问题,但引入了一个新的,不可接受的。

– 如果我将按键closures到一个.ini或其他configuration文件,并没有包含在我的公共代码库中的文件,它仍然必须与我的应用程序的二进制文件分发,以便应用程序的function,所以我的密钥将在应用程序分配中显示,而不是源分配。 不是一个改进。 我试图在这个INI文件上使用的任何encryption体操将增加任何人试图修改我的代码的复杂性。

因此,关于我的代码库(目前在Mercurial中用于版本控制),pipe理所有事情的最好方法是什么,以便代码可以公开,但我的密钥保持私有?

不知道你正在使用什么语言,但是例如在C / C ++中,你需要添加一个带有API密钥的包含文件,然后把它放在源代码pipe理之外,而不是用明显假的 API密钥添加一个伪造文件。 大多数语言都有其中一种方式来包含文件。

你的应用应该使用一个configuration文件。 这个configuration文件在运行时加载,不应该影响编译。 允许用户下载一个二进制文件,并仍然使用自己的API密钥。

正如Kornel所说,你可以在你的源代码控制中包含一个伪造的API Key的configuration文件。

另一个select,你可以与运行web服务的人交谈,并要求其中的一件事情。

  1. 临时密钥,只适用于有限的function。 这将让用户看到您的应用程序的基本function,但有些人永远不会更新密钥,只是使用基本的东西。

  2. 与web服务交谈,看看他们是否会为您的应用程序提供一个特殊的API密钥。 开源版本将要求用户input自己的。 但是你的二进制可以使用一个标准的。

使用一个configuration为api键的想法,并不新鲜或闻所未闻。 Bit.ly服务做到这一点。 所有我看到的提供Bit.ly使用的开源应用程序都要求input用户名和密钥,然后才能使用它。

这是没有什么不同?