为什么在 Flutter/Android 客户端上使用 FCM 服务器密钥是不好的做法?

Why is it bad practice to use an FCM Server Key on a Flutter/Android client?

我想使用我的 Firebase 云消息传递 (FCM) 服务器密钥从我的 Flutter 应用程序发送消息。但有人告诉我这是不好的做法,应该在服务器端完成。但由于 APK 中的代码对用户不可见,为什么这是一个安全问题?

void send() async {
    await http.post(
      'https://fcm.googleapis.com/fcm/send',
      headers: <String, String>{
        'Content-Type': 'application/json',
        'Authorization': 'key=$serverToken',
      },
      body: jsonEncode(
        <String, dynamic>{
          'notification': <String, dynamic>{
            'body': 'This is a body',
            'title': 'Banana'
          },
          'priority': 'high',
          'data': <String, dynamic>{
            'audioid': '139',
            'title': 'done all over time',
            'name': 'Greengirl'
          },          
          'to': '/topics/test_fcm_topic',
        },
      ),
    );
  }

一般而言,不仅是关于您仅针对 FCM 密钥的具体问题,您的 APK 中的代码通常对普通用户不可见。但是你的 APK 代码绝对不安全,无论谁努力找到它并对其进行逆向工程。

几乎没有什么是不可能逆向工程的。我使用 'almost' 因为我无法确认并说 'everything'.

FCM 是免费的,但不是钱的问题。想象一下,有人拥有您的令牌,可以代表您向您的其他任何用户发送消息?

电子邮件通常可以免费使用,但是,您介意与其他人共享吗?