对于一个宠物项目,我开发了一个桌面应用程序,它需要来自多个不同 Web 服务的 API 密钥。
我一直在研究并准备这个应用程序成为开源的,并且遇到了如何处理这些密钥的问题。
问题是这样的:我的理解是,使用应用程序或查看/修改源代码的任何人都不应看到这些 API 密钥。在 Web 服务端,这些 API 密钥用于识别访问其 API 的应用程序,并酌情允许/阻止使用。在大多数接收这些密钥的 TOS 中,实际上明确规定不得与世界共享密钥。
目前我所有的密钥都是硬编码的,但在如何处理开源应用程序中的私钥情况方面,我陷入了僵局:
- 如果密钥仍然是硬编码的,一旦我的源代码出现,它们就会公开可见。
-我不能真正从代码分发中省略带有密钥的源文件,因为那样它就不会编译。这在技术上解决了问题,但引入了一个新的、不可接受的问题。
- 如果我将密钥推送到 .ini 或其他配置文件,并且根本不将该文件包含在我的公共代码存储库中,它仍然必须与我的应用程序的二进制文件一起分发才能使应用程序运行,所以我的密钥将在应用程序分发而不是源代码分发中可见。不是改进。我试图在这个 INI 文件上使用的任何加密操作都会增加任何试图修改我的代码的人的复杂性。
那么,关于我的代码库(目前在 Mercurial 下进行版本控制),管理所有内容以便代码可以公开但我的密钥保持私有的最佳方式是什么?