如何确保只有我的应用程序才能注册和接收从FCM发送的消息?

时间:2018-08-26 11:17:56

标签: android ios firebase firebase-cloud-messaging

我当前正在设置一个Firebase Cloud Messaging项目。将应用添加到此项目时,FCM会自动生成一些凭据,例如服务器密钥以及Android和iOS客户端密钥。

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

我认为这将是(自动创建的)Android客户端API密钥,因此要进行测试,我在密钥限制中放入了错误的程序包名称和SHA指纹。无效,仍然可以接收消息。

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

因此,我真的很想知道是什么阻止了应用程序的逆向工程以提取应用程序ID和常规项目信息,然后在完全不同的应用程序中接收推送消息?我不明白为什么google-services.json文件中包含Android客户端API密钥等,或者为什么不使用它们甚至创建它们。

2 个答案:

答案 0 :(得分:1)

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

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

通过确保客户端代码仅与自己的服务器端代码共享令牌,然后将令牌用于目标FCM消息,您可以创建一个完全安全的传递环境,在此环境中,您可以完全控制谁可以接收每条特定消息。

另一方面是FCM topics,这是一种用于将消息传递给用户组的简单机制。由于任何客户端都可以订阅它知道其ID的任何主题,因此应该使用主题来传递需要安全定位的邮件。

答案 1 :(得分:1)

过去一周来,我一直在与Firebase支持部门联系以阐明这一点。似乎现在不推荐使用的Google Cloud Messaging(GCM)和Firebase Cloud Messaging(FCM)之间存在重要区别,并且目前尚无充分记录。

使用GCM可以使用和限制例如具有包名称和SHA指纹的Android客户端API密钥。使用FCM不再可能。当您在Firebase控制台中将应用程序添加到项目中时,这些密钥会自动创建,并包含在google-services.json文件中,并且您可以在API和服务的“凭据”下为这些限制添加限制,但不会产生任何效果。

请注意,您可以在Firebase项目中添加的SHA指纹仅适用于Firebase邀请或Firebase动态链接。

在决定将消息传递服务用于什么或从GCM迁移到FCM时,请小心并牢记这一点。

Firebase对此有功能要求,但目前没有时间表。现在还要求更新有关此问题的文档。