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

时间:2009-12-31 04:57:32

标签: api open-source api-key

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

我一直在努力使这个应用程序变得开源,并解决了如何处理这些密钥的问题。

问题在于:我的理解是,使用该应用程序或查看/修改源代码的任何人都不应该看到这些API密钥。从Web服务端,这些API密钥用于识别访问其API的应用程序,并允许/阻止使用。在接收这些密钥的大多数服务条款中,实际上明确规定密钥不得与全世界共享。

目前我的所有密钥都是硬编码的,但是我在如何处理开源应用程序中的私钥情况方面陷入僵局:

- 如果密钥仍然是硬编码的,一旦我的源代码出现,它们就会公开显示。

- 从那时起,我无法用代码分发中的密钥省略源文件 它不会编译。这在技术上解决了这个问题,但引入了一个新的,不可接受的 之一。

- 如果我将密钥推送到.ini或其他配置文件,并且根本不包含该文件 在我的公共代码存储库中,它仍然必须与我的应用程序的二进制文件一起分发才能使应用程序正常运行,因此我的密钥将在应用程序分发中显示而不是源代码分发。没有改善。我试图在这个INI文件中使用的任何加密体操都会增加试图修改我的代码的人的复杂性。

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

2 个答案:

答案 0 :(得分:17)

不知道您使用的是哪种语言,但是例如在C / C ++中,您将使用API​​密钥添加包含文件,然后将其保留在源代码管理之外,而是使用添加伪造文件明确伪造 API密钥。大多数语言都有一种或另一种方式来包含文件。

答案 1 :(得分:8)

您的应用应该使用配置文件。此配置文件在运行时加载,不应影响编译。允许用户下载二进制文件并仍使用自己的api密钥。

正如Kornel所说,您可以在源代码管理中包含带有伪API密钥的示例配置文件。

另一种选择是,您可以与运行Web服务的人员交谈,并要求提供以下两种方法之一。

  1. 临时密钥,仅适用于有限的功能。这样可以让用户看到你应用的基本功能,但有些人永远不会更新密钥而只是使用基本功能。

  2. 与网络服务交谈,看看他们是否会为您的应用程序提供特殊的API密钥。开源版本需要用户输入自己的版本。但是你的二进制文件可以使用标准的二进制文件。

  3. 使用配置api密钥的想法,并不是新的或闻所未闻的。 Bit.ly服务做到了。我看到的所有开源应用程序都可以使用Bit.ly来查询你的用户名和api密钥,然后再使用它。

    这没什么不同?