从浏览器发布 Google Cloud Pub/Sub - 身份验证如何工作?

Posted

技术标签:

【中文标题】从浏览器发布 Google Cloud Pub/Sub - 身份验证如何工作?【英文标题】:Google Cloud Pub/Sub Publishing from Browser - How does Auth work? 【发布时间】:2015-05-19 04:47:37 【问题描述】:

我需要直接从浏览器使用 Google Cloud Pub/Sub API(类似于 GA 脚本)。我想知道如何在不需要通过后端服务器的情况下处理 Auth。

我想直接从浏览器调用 Cloud Pub/Sub API。我试过了,它说我需要先进行身份验证,我的问题是如何保护 Auth Token。

是否有任何可用的 javascript 库可供我在浏览器(而不是后端)中使用来调用 Google Pub/Sub API。

提前致谢

【问题讨论】:

嗨@sathishsenathi,如果您还有浏览器中用于访问pub/sub 的javascript 代码,您是否有机会分享它? 【参考方案1】:

在 Javascript 中用于授权和向 Google API 发出授权请求的一般方法显示在 https://developers.google.com/api-client-library/javascript/samples/samples#AuthorizingandMakingAuthorizedRequests ——它不是特定于 Cloud Pubsub API,但它应该适用于所有 Google API。同样,https://developers.google.com/api-client-library/javascript/start/start-js 用于一般 Javascript 访问 Google API。

【讨论】:

是否有任何人实际在浏览器中使用 javascript 订阅 Google pubsub 频道的示例/示例? 据我所知,第一个链接中的示例描述了如何对用户进行身份验证,然后代表该用户执行请求。 “之所以称为“授权”访问,是因为用户必须直接授权应用程序才能使用个人数据。”.所以我认为这不是 OP 想要的。据我所知,您需要通过某些代理服务器将推送反弹到 Pub/Sub。所以需要后端。但是,有一些精益解决方案(例如 Google Cloud Functions)可以轻松获得托管端点。【参考方案2】:

这是一个相当古老的话题,但我最近一直在评估它是否可行。简单的答案是 - 是的,可以直接从浏览器应用程序将消息发送到 PubSub 主题。解决方法如下:

您需要使用 fetch() 通过 REST API 发布消息 您需要发送 Authorization 标头 Authorization 标头必须包含标识用户的 oAuth2.0 令牌;它可以是匿名的经过身份验证的用户,也可以是完全经过身份验证的用户,例如使用 firebase 身份验证库。

要让以上三个都完美运行,您必须编写 很多 代码。它根本不实用,而且在架构上也不好。除非您绝对需要这样做,而不是其他方式(我不明白为什么),否则简化但涉及更多组件的解决方案如下:

通过 firebase 在浏览器中验证用户身份 - 可以是匿名用户或完整用户 使用所需的有效负载对您的云/firebase 函数执行简单的GETPOST 在函数 validate 中,传入的请求将具有经过身份验证的用户令牌 如果验证良好,则发布消息到主题中

通过这种方式,它仍然是安全的,更易于维护,并且清晰地分为功能组件。 更少代码,更多基础设施。

【讨论】:

以上是关于从浏览器发布 Google Cloud Pub/Sub - 身份验证如何工作?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Eclipse 从 Google Cloud Sql 生成数据库的 DDL 语句会导致脚本出现问题?

Google Cloud Function - ImportError:无法从“google.cloud”(未知位置)导入名称“pubsub”

从 Google Cloud 内部 IP 调用 Google Cloud 存储桶

从 google.cloud 导入 bigquery ModuleNotFoundError:没有名为“google”的模块

Access-Control-Allow-Origin 不起作用 Google Cloud Functions GCF

从 Google Cloud Function (Python) 将新文件写入 Google Cloud Storage 存储桶