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

时间:2018-08-14 15:16:14

标签: web-services open-source api-key

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

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

根据我的研究(例如Open source a project but keep API keys confidentialHow to hide the API key in my Electron application?),我可以在第3方API和我的程序之间放置一个代理服务器(封闭源)。现在,我看到了两个敞开大门,让笨拙的人可以攻击这种情况:

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

因此,现在我已经简单地将问题转移到了从第三方到我的代理服务器,以检测运行的软件是否是原始软件。我只能得到的好处是,我可以知道哪个用户是坏人并禁止他,但这是我所能做的,而我的令牌可能会因此问题而被撤销。

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

0 个答案:

没有答案