python - 如何保护将分发给客户端的应用程序中的 API 密钥
问题描述
我正在构建一个使用两条腿身份验证的应用程序。我有一个 API 密钥和 API 秘密,但现在我很困惑。
我目前将我的 api 密钥和秘密存储在一个.yml
文件中。但我想分发 .app 代码,最终会有 .yml 文件。
但是 .app 文件将包含 .yml 文件,这很糟糕,因为每个人都可以看到 API 密钥和 Secret。
如何存储 API 密钥和秘密,以便我的应用程序可以在用户看到的情况下访问密钥和秘密?
解决方案
答案取决于几个变量:
- 包括你的来源吗?
- 是否可以使用服务器为您调用 API?如果是这样,您是否也可以对服务器进行的调用应用限制?
- 将已编译的代码用于存储密钥的位置是一个选项吗?如果是这样,是否可以混淆它?
以下是我根据经验对不同场景的建议:
源不包括在内,使用服务器是一个选项,可以应用限制,但是使用编译的代码不是一个参数
然后使用服务器发出请求。假设您需要调用example.com/api/v1
,并且想要使用一组特定的参数调用特定的函数,那么您只能允许使用该特定的参数集和该特定函数对该特定 API 的请求。这样一来,对于潜在的攻击者来说,它没有任何意义,因为它只调用一个函数而没有其他任何东西。
源不包括在内,使用服务器不是一个选项,编译的代码也不是一个选项
好吧,您无能为力,混淆是您的最佳选择。做这样的事情的最好方法是将它隐藏在你的代码深处,让它变得模糊,等等,等等,等等,
包含源代码,不能使用服务器,但您可以使用编译后的代码
使用真正混淆的程序集,如果可以的话,不要共享源代码。例如,你可以有红鲱鱼指令,就像以前一样,你应该把它隐藏在你的代码深处。
不包括源代码,不能使用服务器,但您可以使用编译后的代码
为此,它与上述相同,因为不会包含程序集的源代码
如果我没有在此处列出您的情况,请随时发表评论,我将编辑我的答案
推荐阅读
- spring - 弹簧通量
doOnNext 未执行 - c - C程序中打印的位数
- android - 使用 RadioButton 单击
- swift - 用于分离 UITest 代码的 Swift 条件语句
- jquery - ASP.NET MVC Texbox jQuery 自动完成功能不起作用
- python - 使用向右或向下跳跃或单位步长的网格中的最小成本路径
- c++ - 当某人写一些东西来“吞噬换行符”时,他们是什么意思?C++
- google-apps-script - 比较两个句子并在删除重复项的同时合并
- c# - 我如何知道已完成的活动中下载了哪些文件?
- mysql - 雪花中的 SUBSTRING_INDEX()