如何在Android应用程序中隐藏API密钥?

胶带

在我的应用程序中,我使用google maps api密钥与google通信。我在gradle调试/发布配置中定义了此MAP_KEY,如下所示:

debug {
            buildConfigField 'String', 'BASE_URL', '"https://myweb.com"'
            buildConfigField 'String', 'SOCKET_URL', '"https://socket.myweb.com"'
            buildConfigField 'String', 'MAP_KEY', '"azaS****Ds"'
        }

但是,如果有人从Google Play商店下载我的应用并进行反编译,他将获得我的API令牌。这是真的?如果是,在我的代码中隐藏api键的方法是什么?

M4HdYaR

简短答案:

根据Google Map文档对您的Google Map API密钥进行模糊处理或加密

在使用Maps Web服务API的移动应用程序上,请考虑以下一种或多种技术,以进一步保护您的应用程序和API
密钥:

  • 在API密钥上应用API限制。此操作将API密钥的范围缩小到您与该密钥关联的API。
    混淆或加密API密钥。此操作使
    直接从应用程序进行刮取尝试变得复杂

  • 使用CA固定或证书固定来验证服务器资源是否有效。CA pinning检查服务器的证书是否由受信任的证书颁发机构颁发,并防止可能导致第三方发现您的API密钥的中间人攻击。通过提取并检查服务器证书中包含的公钥,证书固定可以进一步进行。固定功能对于直接与Google服务器进行通信的移动客户端以及与开发人员自己的代理服务器进行通信的移动客户端非常有用。

  • 使用代理服务器。

您可以使用多种加密或混淆方法,通过快速搜索就可以轻松找到它们。一种常见的方法是将C ++中的密钥作为库进行base64编码,并仅在Java类中调用函数来使用它,因为编译后的C ++代码比您的Java类更难反编译。

使用NDK进行操作的教程

长答案:它取决于

您无法在客户端做任何事情来证明您的代码不被反编译,并特别使一个硬编码的字符串免于提取。

那你该怎么办呢?

这是一个折衷方案,首先,您应该看到您的密钥对您来说很重要,谁会尝试访问它,以及他花了多少时间来破解您的应用程序。有了加密或模糊处理,我们只会变得更加困难,因此我们需要更多的专业人士和更多的时间来对其进行破解(基本上,我们在其中添加的每一层安全性都在这样做。)

如果它太机密,并且泄漏会给您造成很多问题,并且至关重要的是,您应该将其存储在服务器中,那么您应该请求该服务器,并且该服务器将使用您的密钥或JWT令牌之类的东西进行API调用。

但是对于Google Map API,只要您对其进行监控和正确配置,则泄露密钥不会给您带来很多问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在我的Electron应用程序中隐藏API密钥?

如何在Angular 2客户端应用程序中隐藏/保护API密钥?

如何在 Android 中隐藏 API 密钥

如何在 js 文件中隐藏 API 密钥,我使用“ axios”从 js 文件请求 url,我的应用程序不是基于节点的

如何在Android应用程序中使用Google公共API访问密钥?

如何在应用程序中传递密钥库

如何在Swift中适应Mashape应用程序密钥?

如何在Android应用程序(Android Studio 4.1)中隐藏状态栏

如何在Android中隐藏翻译器API密钥

如何在Angular应用程序中隐藏损坏的图像

如何在Swing应用程序中隐藏光标?

如何在我的 android 应用程序中完全隐藏 ui

如何在Android应用程序中创建隐藏文件夹?

如何在运行时在Android应用程序中隐藏(或删除)操作栏

如何在应用程序用户之外隐藏android应用程序下载的文件

在反应静态 Firebase 托管应用程序中隐藏/屏蔽 API 密钥或敏感数据

如何在iPhone应用程序中以编程方式隐藏应用程序图标

如何在我的应用程序中隐藏其他应用程序?

在闪亮的应用程序部署中隐藏密钥

如何在React中隐藏API密钥?

我有一个密钥库文件,如何在Android应用程序中为sslContext提供keyManager?

如何在应用程序内利用Android Car API

如何在Android应用程序中保护ElasticSearch API?

当应用程序在托盘中时,如何在Dock中隐藏Java SWT程序图标

如何在开源(Github + Heroku)应用程序中保护Google API密钥

如何在PWA(渐进式Web应用程序)中保护API密钥

如何在android中的应用程序订阅中测试

如何在Android中的通知中打开应用程序?

如何在Android应用程序中访问graph.windows.net Microsoft Azure Graph API?