如何在公共开源项目中隐藏 API 密钥?

Chr*_*olf 5 open-source web-services api-key

我有一个问题,我想编写一个程序,该程序必须与某些 3rd 方 Web 服务进行交互。此服务需要客户端(我的程序)通过用户名/密码组合以及令牌来授权自己的特定操作。用户名/密码特定于我的程序的用户,这里没有问题。令牌(API 密钥)有问题。

假设我想让我的程序开源并将其源代码放在某个公共服务器上。当然,我不能硬编码(或包含)API 密钥。否则,我不仅会违反不发布它的合同,而且任何(未经授权的)使用都将归咎于我和我的程序。

根据我的研究(例如,开源一个项目但对 API 密钥保密如何在我的 Electron 应用程序中隐藏 API 密钥?)我可以在 3rd 方 API 和我的程序之间放置一个代理服务器(封闭源代码)。现在我看到有两扇敞开的大门让心怀不轨的人攻击这种情况:

  1. 由于主程序的源代码是开源的,任何与代理的交互都可以从源代码中读取。攻击者可以分叉我的主程序并在代理上使用完全相同的调用,但数据已泄露。与公开可用的密钥相同的结果:我的程序会因为其他人的不良操作/编程技巧而陷入困境。
  2. 我可以添加一个用户名/密码来根据我的代理验证程序。然后,我向代理提供(免费使用)注册,以便有效地使用我的程序。这增加了额外的身份验证和复杂性层,但是是可行的。任何真正想做坏事的人都可以获取密码并使用自己的叉子访问代理。我不能把我自己的密钥/加密/....放在任何地方,因为解密/模仿这些的必要程序将在开源项目中公开可见。

所以现在我只是将问题转移到检测正在运行的软件是否是原始软件,从第 3 方转移到我的代理服务器。我唯一的好处是我可能知道哪个用户是坏人并禁止他,但这就是我所能做的,而我的令牌可能会被这个问题撤销。

很抱歉,我没有在网络上找到针对此特定问题的可用解决方案。我该如何解决这个问题(在抽象层面上)?