如何使用Firebase Hosting安全地存储和检索Android应用程序(使用本机Java编写)的API密钥?

时间:2015-05-20 20:10:07

标签: firebase api-key firebase-hosting

我刚开始学习编码。提供示例代码将非常棒。

我使用Firebase开发了一个简单的Android应用程序(本机Java)。我有几个API密钥硬编码到我的应用程序的资源中。我读到最好将这些密钥存储在服务器上。我目前没有自己的域名或服务器,但我有兴趣使用Firebase托管来存储这些API密钥。

我很感激帮助建立通过Firebase Hosting存储和检索这些API密钥的基础。如果它们简单而安全,我愿意接受其他建议。

谢谢!

2 个答案:

答案 0 :(得分:3)

您的(移动或网络)客户端不应包含Firebase的密钥。在某些时候,有人会对您的代码进行反向工程,提取秘密,并且能够读取/写入Firebase数据库中的所有数据。你在那个阶段唯一可以做的就是撤销秘密,这将使所有客户失败。

Firebase托管允许您仅存储静态资源。因此,虽然您可以将您的API密钥存储在Firebase的托管服务器上,但它对安全性的帮助不大。它仍然可以被所有人阅读。

您应该做的是在客户端中使用常规Firebase身份验证。 Firebase's guide for user authentication on Android中介绍了这一点。可以在Firebase Login Demo for Android中找到一个很好的例子。

答案 1 :(得分:-1)

您可以加密API密钥和其他敏感数据。 Here是一篇很棒的文章。最敏感的是密码,它将用于对称密钥生成。重要的是(是的,同样的问题),不要在代码中硬编码这个密码,而是在运行时计算它。计算的一个好部分是APK的证书数据(Retrieve the apk signature at runtime for Android)。这可能会使逆向工程师的工作变得更加困难。但动态分析将帮助他/她获得一个秘密密钥。

服务器端计算技术在这里也非常有用,特别是与之前的建议相结合。

因此,密钥的一部分在运行时生成,另一部分在成功的用户认证之后从服务器接收。只是一个例子。

但最简单的方法是使用支持字符串/ dex字节码加密的商业混淆器,如DexProtector

N.B。我隶属于Licel(DexProtector的开发人员)