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

cal*_*gun 46 api open-source api-key

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

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

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

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

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

- 我不能用代码分发中的密钥省略源文件,因为它不会编译.这在技术上解决了这个问题,但引入了一个新的,不可接受的问题.

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

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

Kor*_*icz 17

不知道你正在使用什么语言,但是例如在C/C++中你要添加一个包含API密钥的包含文件,然后将其从源代码控制中删除,而是添加一个带有明确假 API密钥的虚假文件.大多数语言都有一种或另一种方式来包含文件.


Rya*_*ons 8

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

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

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

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

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

使用配置api密钥的想法并不是新的或闻所未闻的.Bit.ly服务做到了.我看到的所有开源应用程序都可以使用Bit.ly在您使用它之前询问您的用户名和API密钥.

这没什么不同?

  • 说实话,没有什么能阻止精明的黑客破解你的API密钥,即使是从编译过的表单中也是如此. (8认同)