首页 > 解决方案 > 向设备发送 FCM 消息而不验证发件人可能吗?

问题描述

这可能是一个奇怪的问题,但是:

我有一个需要向 Android 和 iOS 设备发送通知的外部服务器,因为 firebase 是我需要使用它的唯一处理后台通知的方法。

现在,服务器是高度安全的,不允许来自任何 IP 的传入连接。我仍然需要发送 FCM 消息。在文档中,我们必须对发件人进行身份验证(这显然是不可能的,因为这需要双向连接)。

是否有可能在没有任何身份验证的情况下发送消息?像公共 POST 一样?

或者如果没有。有没有办法,我可以重复使用相同的私钥进行身份验证,这样我仍然可以在不需要传入连接的情况下触发和忘记?

对于那些对为什么感兴趣的人:我们只发送一个数据通知(触发器),表明某些事情可能发生了变化,真正的安全连接通过单独的通道在后台发生,没有火力。Firebase 只是触发更改以避免轮询后端

编辑:

这段代码可以实际用作fire-and-forget

    FileInputStream serviceAccount = new FileInputStream(SERVICE_ACCOUNT_FILE);

    FirebaseOptions options = FirebaseOptions.builder()
        .setCredentials(GoogleCredentials.fromStream(serviceAccount))
        .build();

    FirebaseApp.initializeApp(options);


    //...Generate message


    FirebaseMessaging.getInstance().send(message);
      

标签: javaauthenticationfirebase-cloud-messaging

解决方案


如果您使用旧协议发送消息,则可以通过Authorization在请求标头中提供静态 FCM 服务器密钥来进行身份验证。有关更多信息,请参阅有关授权遗留协议发送请求的文档。

虽然建议新应用程序使用版本化(当前v1)API,但没有计划淘汰旧版 API。


通过快速查看有关手动提供凭据的文档,您似乎还可以使用预生成的服务帐户凭据进行身份验证。这也不需要在运行时进行任何动态身份验证。


推荐阅读