问题描述
这个问题如何不是重复?
虽然@MrUpsidedown 在评论部分提供了一些相关问题,但他们都没有真正回答我在这里强调的部分:如何安全地提供 API 密钥?
阅读链接问题中的所有答案后,我倾向于自己写一个答案。
上下文
我是一名非常新的 Flutter 开发人员,他尝试将 Google 地图集成到演示应用程序中。
为了节省时间,我决定尝试我能找到的最流行的 Google 地图小部件库,即 google_maps_flutter
。该库的简洁文档显示了 Android 和 iOS 使用示例,并且都说明了 API 密钥作为代码库的一部分内联提供:
import UIKit
import Flutter
import GoogleMaps
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
GMSServices.provideAPIKey("YOUR KEY HERE") // <------------------------------------ O--пп
GeneratedPluginRegistrant.register(with: self)
return super.application(application,didFinishLaunchingWithOptions: launchOptions)
}
}
<manifest ...
<application ...
<meta-data android:name="com.google.android.geo.API_KEY"
android:value="YOUR KEY HERE"/> <-------------------------------------- O--пп
大多数开发人员都知道API 密钥必须安全存储。库文档中的代码不适合生产应用程序。 Google Maps Platform documentation 明确警告不要硬编码 API 密钥:
不要直接在代码中嵌入 API 密钥或签名密钥。
...
不要将 API 密钥或签名机密存储在应用程序源树内的文件中。
问题
如何以正确、安全的方式使用此软件包?甚至有可能吗?
我经常听到一个反复出现的想法:“客户端应用程序不能永远信任存储 API 密钥(和类似的机密/凭据),因为它可以被控制、操纵或反转由恶意用户设计。”如果是这种情况,是否意味着我必须认为 google_maps_flutter
包本质上是不安全的,只要它需要明确提供 Google Maps API 密钥?
我也知道 API 密钥限制。我肯定会使用它,但在我看来它只会在 API 密钥被泄露时减少“爆炸半径”。但是,我看不出这如何防止 API 密钥泄漏和被第三方滥用。
附注
最初,我想更广泛地提出我的问题:有没有办法在移动平台(Android 和 iOS)上安全地交付、存储和使用机密?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)