android - 如何确保只有我的应用能够注册和接收从 FCM 发送的消息?

标签 android ios firebase firebase-cloud-messaging

我目前正在设置一个 Firebase 云消息传递项目。将应用程序添加到此项目时,FCM 会自动生成一些凭据,例如服务器 key 以及 Android 和 iOS 客户端 key 。

对于 Android,我可以下载并使用 google-services.json 文件来设置客户端,即注册 FCM token 和接收推送消息。但是我如何限制它以便只有我的应用可以接收这些消息?

我认为这将是(自动创建的)Android 客户端 API key ,因此为了测试我在 key 的限制中放置了不正确的包名称和 SHA 指纹。没效果,还能收到消息。

然后我尝试从 google-services.json 文件中完全删除 API key 和 oauth 客户端信息,以确认设备将无法接收消息。没有影响,仍然可以收到消息。除了应用程序 ID(和一般项目信息)外,所有客户信息似乎都被完全忽略了。

所以,我真的很想知道是什么阻止了对应用程序进行逆向工程以提取应用程序 ID 和一般项目信息,然后在完全不同的应用程序中接收推送消息?我不明白为什么 Android 客户端 API key 等包含在 google-services.json 文件中,或者如果不使用它们,为什么还要创建它们。

最佳答案

google-services.json 中的所有信息本质上都是配置数据,您的应用会使用这些配置数据在 Google 服务器上查找 Firebase 服务。您不应该依赖于了解它或不知道它作为一种安全机制。

相反,您应该以确保仅将邮件传递给目标收件人的方式发送邮件。其中很大一部分是sending messages to specific FCM Instance ID tokens . Firebase 的实例 ID token 是无法猜测的。最初,此注册 token 仅在生成它的客户端设备上是已知的,并且该设备决定与谁共享它。

通过确保您的客户端代码只与您自己的服务器端代码共享 token ,然后服务器端代码使用它来定位 FCM 消息,您可以创建一个完全安全的传递环境,您可以在其中完全控制谁可以接收每条特定消息。

另一边是FCM topics ,这是一种向用户组传递消息的更简单的机制。由于任何客户端都可以订阅它知道其 ID 的任何主题,因此主题应该用于传递需要不太安全的定向传递的消息。

关于android - 如何确保只有我的应用能够注册和接收从 FCM 发送的消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52025709/

相关文章:

ios - 使用 Firebase 添加好友系统的最佳实践?

java - 同一项目中的多个 android-support-v4 版本

ios - 如何在 Swift 中实现一个类来为应用程序创建一个全局用户?

ios - AFNetworking AFHTTPSessionManager POST 调用了两次

java - 如何正确地将 Firebase 的 MinSDKVersion 从 15 更改为 16

android firebase动态链接PendingDynamicLinkData为null直接通过app

android - 如何修复 Android 项目发布构建 proguard 错误 "Duplicate zip entry"?

android - 'Make' 和 'Gradle-aware Make' 有什么区别?

Android-Market,一个类似 Facebook 的 API 来导出评论?

iphone - 音量硬件按钮输入