首页 > 解决方案 > 发布订阅 HTTP POST?

问题描述

我正在使用一项服务,该服务将通过 HTTP POST 请求将数据转发到您选择的 URL。

有没有一种简单的方法可以通过 POST 发布到 Pubsub 主题?我正在使用的服务(Hologram.io 的Advanced Webhook Builder)无法存储任何文件,因此我无法上传 Google Cloud 服务帐户 JSON 密钥文件。

谢谢,瑞安

标签: restpostgoogle-cloud-platformgoogle-cloud-pubsub

解决方案


您的用例中有 2 个挑战:

  • 格式
  • 验证

格式

您需要自定义 webhook 以符合 PubSub 格式。一些 webhock 足够可定制,但并非全部如此。如果您无法像 PubSub 期望的那样自定义 webhook 调用,则需要使用中间层(例如 Cloud Functions 或 Cloud Run)

验证

直接到 PubSub 或使用中间层,情况是一样的:请求者(webhook)需要经过身份验证和授权才能访问 Google Cloud 服务。

一种不好的且可能的做法是设置allUsers授权访问您的资源。这是一个带有 PubSub 主题的示例

在此处输入图像描述

不要那样做。即使您通过定义架构来提高“您的”流程安全性(从而拒绝所有不符合此架构的消息),让资源公开且无需身份验证,在狂野的互联网上访问也是犯罪!

在 webhook 上下文中(我以前在我的公司有过这种情况)我建议您使用静态身份验证(长期存在的身份验证标头;而不是短暂的 (1h) 作为 Google OAuth2 令牌);例如 API 密钥。这并不完美,因为在 API 密钥泄露的情况下,不良行为者将能够长时间使用此漏洞(尽快轮换您的 API 密钥!),但总比没有安全!

我写了一篇关于这个用例(使用 ESPv2 和 Cloud Run)的相当古老的文章,但原理和配置在 API Gateway 上几乎相同,这是一个 Google Cloud 管理服务。在本文中,我为 Cloud Run、Cloud Functions 和 App Engine 创建了一个代理,但您可以通过设置正确的目标 URL 对 PubSub 执行相同的操作。


推荐阅读