Flutter 中的安全性:google_maps_flutter 需要 API 密钥,但如何安全地提供它们?

问题描述

这个问题如何不是重复?

虽然@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 (将#修改为@)