在我的应用程序中,我使用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键的方法是什么?
根据Google Map文档对您的Google Map API密钥进行模糊处理或加密:
在使用Maps Web服务API的移动应用程序上,请考虑以下一种或多种技术,以进一步保护您的应用程序和API
密钥:
在API密钥上应用API限制。此操作将API密钥的范围缩小到您与该密钥关联的API。
混淆或加密API密钥。此操作使
直接从应用程序进行键刮取尝试变得复杂。使用CA固定或证书固定来验证服务器资源是否有效。CA pinning检查服务器的证书是否由受信任的证书颁发机构颁发,并防止可能导致第三方发现您的API密钥的中间人攻击。通过提取并检查服务器证书中包含的公钥,证书固定可以进一步进行。固定功能对于直接与Google服务器进行通信的移动客户端以及与开发人员自己的代理服务器进行通信的移动客户端非常有用。
使用代理服务器。
您可以使用多种加密或混淆方法,通过快速搜索就可以轻松找到它们。一种常见的方法是将C ++中的密钥作为库进行base64编码,并仅在Java类中调用函数来使用它,因为编译后的C ++代码比您的Java类更难反编译。
您无法在客户端做任何事情来证明您的代码不被反编译,并特别使一个硬编码的字符串免于提取。
那你该怎么办呢?
这是一个折衷方案,首先,您应该看到您的密钥对您来说很重要,谁会尝试访问它,以及他花了多少时间来破解您的应用程序。有了加密或模糊处理,我们只会变得更加困难,因此我们需要更多的专业人士和更多的时间来对其进行破解(基本上,我们在其中添加的每一层安全性都在这样做。)
如果它太机密,并且泄漏会给您造成很多问题,并且至关重要的是,您应该将其存储在服务器中,那么您应该请求该服务器,并且该服务器将使用您的密钥或JWT令牌之类的东西进行API调用。
但是对于Google Map API,只要您对其进行监控和正确配置,则泄露密钥不会给您带来很多问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句