java - 向设备发送 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);
解决方案
如果您使用旧协议发送消息,则可以通过Authorization
在请求标头中提供静态 FCM 服务器密钥来进行身份验证。有关更多信息,请参阅有关授权遗留协议发送请求的文档。
虽然建议新应用程序使用版本化(当前v1
)API,但没有计划淘汰旧版 API。
通过快速查看有关手动提供凭据的文档,您似乎还可以使用预生成的服务帐户凭据进行身份验证。这也不需要在运行时进行任何动态身份验证。
推荐阅读
- apache-kafka - Nifi:PublishKafkaRecord:IllegalStateException:生产者关闭后无法执行操作
- angular - 将 BehaviorSubject 绑定到按钮的 [禁用]
- python - 在 Python 中读取一个文本文件以恢复其中定义的变量
- sql - 如何在 Tableau 中创建带有参数的标志
- camera - 我如何在带有 QUAGGA JS 的浏览器中使用手机的后置摄像头
- xml - 解组嵌套的 xml golang
- jenkins - 如何生成特定日期范围的构建详细信息并使用 Jenkins Rest API 构建用户?
- laravel - Laravel - 如何根据员工和登录用户获取公司详细信息
- javascript - “显示全部”不会重绘/刷新表格
- python - 视觉里程计 - 旋转和平移问题