Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在android应用程序中保存Google云平台API json密钥_Android_Google Cloud Platform - Fatal编程技术网

如何在android应用程序中保存Google云平台API json密钥

如何在android应用程序中保存Google云平台API json密钥,android,google-cloud-platform,Android,Google Cloud Platform,我正在我的应用程序中使用谷歌云翻译。我将JSON服务API密钥存储在原始文件夹中,并通过如下所示的输入流获得访问权限 当我构建我的发布版APK并将其重命名为relese.zip,然后在原始文件夹中提取并查找JSON,其中包含所有API密钥。其他一些人可能也会这样做,并将API用于他们的应用程序。如何以另一种方式存储JSON API密钥 GoogleCredentials myCredentials=GoogleCredentials.fromStream(is) 保护API有两个部分。服务器端和

我正在我的应用程序中使用谷歌云翻译。我将JSON服务API密钥存储在原始文件夹中,并通过如下所示的输入流获得访问权限

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


GoogleCredentials myCredentials=GoogleCredentials.fromStream(is)

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

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

  • 客户端:这个问题没有简单的答案。首先,您必须启用proguard、minify和shrink资源来隐藏代码。至于保护密钥,我发现最好的选择是启用NDK并使用本机C代码存储密钥,这比简单的apk更难破解。再看看答案


  • 通过指纹签名进行限制的工作量较小,足以防止滥用。使用NDK和加密更适合于非谷歌API密钥。。。您还可以通过Firebase远程配置添加其他密钥。@MartinZeitler您不能使用Firebase远程配置存储纯文本密钥,您必须在使用前以某种方式对其进行加密。从doc()开始,不要将机密数据存储在远程配置参数键或参数值中。#1对于服务帐户是不可能的#2是一个非常糟糕的主意。切勿在应用程序中分发服务帐户密钥。我很容易打破这种方法。这是逆向工程101的东西。@JohnHanley你有什么建议吗?我把我的建议添加到了问题中。这不是一个容易回答的问题,因为前端和后端设计缺少很多细节。请重新设计您的授权策略。永远不要分发服务帐户密钥。在您的后端为您的客户和服务帐户使用Google OAuth。我只是在使用简单翻译类,当有人在编辑文本应用程序中粘贴内容时,会将其翻译为另一种语言并显示在文本视图中。安全就是安全,如果您只是在练习/试验,则应在问题中提供这些详细信息。这将阻止安全专家向您提供您不想要的建议。