rest - 发布订阅 HTTP POST?
问题描述
我正在使用一项服务,该服务将通过 HTTP POST 请求将数据转发到您选择的 URL。
有没有一种简单的方法可以通过 POST 发布到 Pubsub 主题?我正在使用的服务(Hologram.io 的Advanced Webhook Builder)无法存储任何文件,因此我无法上传 Google Cloud 服务帐户 JSON 密钥文件。
谢谢,瑞安
解决方案
您的用例中有 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 执行相同的操作。
推荐阅读
- android - 一个活动中的两个布局可见性问题
- javascript - 显示键盘 android (cordova)
- r - 更改向量中特定值的位置
- elasticsearch - Logstash 索引未反映在 Kibana 中
- uwp - 安装 UWP 应用返回未经授权的错误
- google-apps-script - google apps 脚本创建的 html 发布在 Google Docs 中,从今天开始出现错误
- jmeter - 通过java代码添加jmeter用户参数预处理器
- scala - Spark SQL:如果存在则更新,否则忽略
- javascript - 使用来自 servlet 的上一个表单值重定向回上一个 jsp 页面
- image - TclError:图像“pyimage68”不存在