如何保护将分发给客户端的应用程序中的 API 密钥

时间:2021-03-16 17:19:52

标签: python api api-key

我正在构建一个使用两条腿身份验证的应用程序。我得到了一个 API 密钥和 API 秘密,但现在我很困惑。

我目前将我的 api 密钥和机密存储在 .yml 文件中。但我想分发 .app 代码,最终会得到 .yml 文件。

但是 .app 文件将包含 .yml 文件,这很糟糕,因为每个人都可以看到 API 密钥和 Secret。

如何存储 API 密钥和机密,以便我的应用程序可以在用户不看到的情况下访问密钥和机密?

2 个答案:

答案 0 :(得分:1)

答案取决于几个变量:

  1. 是否包括您的来源?
  2. 是否可以使用服务器为您调用 API?如果是这样,您是否也可以对服务器发出的调用应用限制?
  3. 使用编译代码存储密钥的位置是否是一个选项?如果是这样,是否可以对其进行混淆?

以下是我根据经验对不同场景的建议:

不包括源代码,使用服务器是一个选项,可以应用限制,但是使用编译代码不是参数

然后使用服务器发出请求。假设您需要调用 example.com/api/v1,并且您想使用一组特定的参数调用特定的函数,那么您只能允许对该特定 API 的请求,使用该组特定的参数,并且具体功能。这样,它对潜在的攻击者来说就没有任何意义,因为它只调用一个函数而没有其他任何东西。

不包括源代码,使用服务器不是一种选择,编译代码也不是一种选择

好吧,您无能为力,混淆是您最好的选择。做这样的事情的最好方法是把它隐藏在你的代码深处,让它变得模糊,等等,等等,

包含源代码,使用服务器不是一种选择,但您可以使用编译代码

使用真正混淆的程序集,并且如果可以,不要共享其源代码。例如,你可以有红鲱鱼指令,就像以前一样,你应该把它隐藏在你的代码深处。

不包括源代码,使用服务器不是一种选择,但您可以使用编译代码

这和上面的一样,因为程序集的源代码不会被包含

如果我没有在这里列出您的情况,请随时发表评论,我会编辑我的答案

答案 1 :(得分:0)

虽然我认为现有答案在技术上是正确的,但指出分布式软件中的硬编码 api 密钥存在一些安全问题可能会令人愤怒。

API 密钥的性质是易变的,它的设计目的不是永远存在。

如果 API 密钥失效会发生什么?那不会使所有分布式软件变得无用吗? 如果 API 密钥具有写入权限并被泄露,会发生什么?如何区分合法写入和恶意写入?

即使我理解开销,但最终用户可以设置由最终用户自己获得的专用密钥以及替换初始密钥的方法的情况将有助于解决上述两个问题。

API Key 功能之一是由代表用户的机器使用,但如果所有用户都相同,则此功能变得毫无意义。