将私有 api 密钥存储在颤振中
Posted
技术标签:
【中文标题】将私有 api 密钥存储在颤振中【英文标题】:store private api key in flutter 【发布时间】:2021-09-18 09:49:30 【问题描述】:我正在使用 firebase 和我的后端 API 为我的 APP 获取数据。
该 api 需要 GCP 密钥才能访问。此密钥每 90 天过期一次。因此,我无法将密钥存储在客户端/手机中。
需要一些关于我可以在哪里存储密钥的想法。我尝试了 Firebase 远程配置并且它可以工作,但 Firebase 文档说不应该使用敏感数据。
创建返回密钥的后端服务并不安全,因为任何人都可以调用该服务,
需要一些建议。 Firestore/Realtime 数据库是一个选项吗?该应用程序只会读取数据。但是,当数据更改(新密钥)时,应用程序应该会获得最新的。
感谢您的建议
【问题讨论】:
【参考方案1】:虽然通过远程配置或云数据库等机制在运行时向应用分发私有 API 密钥可能会降低其被拦截的风险,但不足以阻止有足够动机的恶意用户。这就是 Remote Config 文档不建议使用它的原因,这同样适用于其他分发机制(例如您提到的数据库)。
如果这是一个私有 API 密钥,则不应在客户端代码中使用它。这真的是唯一的解决方案。当您在客户端代码中使用它时,恶意用户可能会访问它,然后滥用受私有 API 密钥保护的后端服务。
私有 API 密钥应该保密,并且只能在受信任的环境中使用(例如您的开发机器、您控制的服务器或 Cloud Functions)。当您允许您应用的用户通过该私有环境进行调用(通过为他们定义您自己的 API)时,您必须自己保护该端点,以确保只有授权用户才能访问它们。
【讨论】:
谢谢,但我的移动应用需要与服务器上的 API 通信。要做到这一点,需要一把钥匙。此密钥每 90 天更改一次。客户端如何与 API 对话。我需要密钥,并且必须将其存储在某个地方。你有什么建议? 我建议只将私钥保存在受信任的环境中,在自定义 API 中公开必要的功能,并保护对该 API 的访问以满足您的需求。以上是关于将私有 api 密钥存储在颤振中的主要内容,如果未能解决你的问题,请参考以下文章
为 Elastic Beanstalk 上的 github 私有存储库访问设置 SSH 密钥
Composer Github 私有存储库无法使用给定的密钥
如何使用带有密码的 SSH 密钥身份验证“去获取”私有存储库