【问题标题】:How to save Google cloud platform API json key in android app如何在安卓应用中保存谷歌云平台 API json 密钥
【发布时间】:2019-10-15 05:16:40
【问题描述】:

我在我的应用中使用 Google 云翻译。我将 JSON 服务 API 密钥存储在原始文件夹中,并通过如下所示的输入流进行访问

当我构建我的发布 APK 并将其重命名为 relese.zip 并提取并在包含所有 API 密钥的原始文件夹中找到 JSON 时。其他一些人可能会这样做,并将 API 用于他们的应用程序。如何以另一种方式存储 JSON API 密钥。

GoogleCredentials myCredentials = GoogleCredentials.fromStream(is);

【问题讨论】:

  • 重新设计您的授权策略。切勿分发服务帐户密钥。在您的后端为您的客户和服务帐户使用 Google OAuth。
  • 我只是在使用简单的翻译类,当有人在编辑文本应用程序中粘贴某些内容时,会将其翻译成另一种语言并显示在文本视图中。
  • 安全就是安全,如果您只是在练习/实验,您应该在问题中提供这些详细信息。这将防止安全专家向您提供您不想要的建议。

标签: android google-cloud-platform


【解决方案1】:

保护 API 有两个部分。服务器端和客户端。

  1. 服务器端:您可以在 Google 云服务器上添加您的应用程序包名称,并添加您的开发和发布哈希以限制 API 仅适用于具有这些签名的应用程序。

  2. 客户端:这个没有简单的答案。首先,您必须启用 proguard、缩小和缩减资源以隐藏您的代码。至于保护密钥,我发现最好的选择是启用 NDK 并使用 Native C 代码来存储密钥,这比简单的 apk 更难破解。也看看this的回答。

【讨论】:

  • 通过签名指纹进行限制省力,足以防止滥用。使用 NDK 和加密更适用于非 Google API 密钥……也可以通过 Firebase 远程配置添加其他密钥。
  • @MartinZeitler 您不能使用 firebase 远程配置来存储纯文本密钥,您必须在使用前以某种方式对其进行加密。来自文档 (firebase.google.com/docs/remote-config/#policies_and_limits) 不要将机密数据存储在远程配置参数键或参数值中。
  • #1 不适用于服务帐户。 #2是一个非常糟糕的主意。切勿随您的应用分发服务帐户密钥。我可以轻松打破这种方法。这是逆向工程 101 的东西。
  • @JohnHanley 那你有什么建议呢?
  • 我在问题中添加了我的建议。这不是一个容易回答的问题,因为缺少很多关于前端和后端设计的细节。
猜你喜欢
  • 2011-02-20
  • 1970-01-01
  • 2023-03-22
  • 2019-04-19
  • 1970-01-01
  • 2012-03-25
  • 2017-01-11
  • 1970-01-01
  • 2020-03-31
相关资源
最近更新 更多