问题标签 [grpc-web]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
685 浏览

javascript - 未找到 VueJS Grpc-Web 模块

我创建了一个具有 TypeScript 功能的全新 VueJS 应用程序。

当我生成使用:

我得到以下文件:

在此处输入图像描述

当我将它们移到src/_protos我的 VueJS 项目中并尝试时,import { PlatformClient } from '@/_protos/ServiceServiceClientPb';它会给我以下错误:

为什么是这样?

0 投票
1 回答
636 浏览

google-cloud-platform - 谷歌端点 + grpc-web

正如 Google 端点的 esp 代理的变更日志中所见(https://github.com/cloudendpoints/esp/pull/283),已为其添加了对 grpc-web 的支持。

但是,我无法让它工作。我使用以下 cors 配置部署了 esp

然后配置了一个 GRPC Google 端点。

当我尝试向该端点发送 grpc-web 请求时,我可以看到该OPTIONS请求已通过,但我在实际请求中得到了 400,并带有以下响应

我认为这是从 Google Endpoints 回来的,这导致人们相信 grpc-web 支持可能还没有完全存在。

有没有人设法让这个工作?

0 投票
2 回答
3688 浏览

grpc-web - 我们可以在没有 docker 依赖的情况下使用 nginx 代理进行 gRPC-web 集成吗?

需要在没有 docker 的情况下使用 NGINX

我尝试使用具有 docker 依赖项的 envoy 代理使用 gRPC-web 集成,所以我搬到了 NGINX,如何在没有 docker 依赖项的情况下使用 NGINX?

0 投票
1 回答
1619 浏览

angular - 在 Linux 上更新 protoc-gen-grpc-web

我通过 npm 安装了 grpc-web 和 protoc-gen-grpc-web。所以当我这样做时,npm list -g | grep grpc我得到

然后我尝试将 protoc-gen-grpc-web 插件更新到最新版本1.0.3,但我不知道该怎么做。

我从https://github.com/grpc/grpc-web/releasesprotoc-gen-grpc-web-1.0.3-linux-x86_64上的发布页面下载并替换了. 但仍然列出版本。那么这到底应该如何工作呢?protoc-gen-grpc-web/usr/local/lib/node_modules/@grpc-gen/protoc-gen-grpc-web/bin/npm list0.4.0

0 投票
0 回答
712 浏览

node.js - gRPC 允许两个客户端相互交谈

我最近开始学习如何做微服务架构,我想使用 gRPC 而不是 REST 作为我的前向 API。我环顾四周,试图找到两个客户端交换信息(基本上是调用对方的 API)的 node.js 示例,但我没有找到太多。我不确定这是我误解还是我遗漏的东西。我有两个服务

现在我有这个基本的原型:

name并希望微服务 A 能够请求age微服务 B。我可以协调客户端到服务器的通信,但我不完全确定如何让两个客户端通过各自的 gRPC API 交换信息。我目前正在使用节点来获取从客户端到服务器的通信。任何帮助或链接都会非常有帮助

0 投票
0 回答
3706 浏览

authentication - 使用 gRPC-web 通过身份验证安全地公开 gRPC 服务

我们正在使用 Improbable 的gRPC-Web 库将 gRPC 服务(在 Go 中实现)公开给在浏览器中运行的 Javascript 客户端。该服务将与现有的前端 Go 服务并列,该服务托管基于 REST 的 API。现有服务使用基于会话的身份验证来对其用户进行身份验证(会话 cookie + XSRF 保护,带有双重提交 cookie,也使用某些每个会话的服务器端状态进行验证)。

前端 Go 服务托管各种 API 端点,这些端点要么在本地处理,要么通过将请求代理到其他服务来实现。所有端点都通过 Gin 中间件处理程序链公开,该处理程序链实现上述会话身份验证和 XSRF 保护检查。有人建议我们在这个现有的中间件后面托管 gRPC-Web 的gogrpcproxy 组件,以向世界公开我们的 gRPC 服务。

我有兴趣确保验证传入 gRPC-Web 请求的方法是安全的。提出了以下方法:

  • 基于令牌的身份验证——即在 gRPC 请求元数据中传递承载令牌,由后端 gRPC 服务验证。如果不涉及 gRPC-Web,这与验证原生 gRPC 调用的验证模型相匹配。

    在这个模型中,gRPC-Web 的职责是实现浏览器和服务器之间的传输抽象,以及编组到/来自本机 gRPC 表示的请求;身份验证被委托给支持 gRPC 服务。gRPC-Web 代理作为现有 REST API 外部的单独端点托管。

  • 基于会话的身份验证——重用现有的会话身份验证中间件。在此模型中,grpcweb 代理服务器托管在 Gin 处理程序链后面。在接受请求之前,Gin 会执行常规检查以验证相关 cookie 和 XSRF 标头是否存在。

    这种方法重用了大部分现有的身份验证逻辑。但是,它需要传递 XSRF 标头以确保请求被 Gin 中间件接受。这在当前实现中可以通过设置请求元数据来实现,该元数据(当前)通过在出站 HTTP 请求上设置标头来实现。但是,我不清楚这是否:

    • 是合适的,因为通过利用元数据当前作为 HTTP 标头传递的实现细节,这似乎是违反层的。这没有记录在案,并且可能会发生变化;
    • 与 gRPC-Web 的 websocket 传输兼容,它似乎不会将元数据传播到标头中,因为 websocket 传输在传输任何请求之前就已拨号;
    • 将来会遇到潜在的安全问题,因为与前端服务的长期 gRPC-Web 传输连接仅在首次建立时由前端代理进行身份验证,而不是在每个请求上持续进行身份验证(除非 gRPC 服务也验证请求元数据)。

我的理解是 gRPC-Web 试图模拟浏览器和服务器之间的 gRPC 传输,因此没有实现特定的身份验证逻辑。用于传递身份验证详细信息的标准 gRPC 机制不允许隐式基于会话的状态,因此我更喜欢基于令牌的方法。

这是对可用选项的合理分析吗?

0 投票
1 回答
1480 浏览

kubernetes - 尝试从 Web 客户端 (grpc-web) 调用 GRPC 服务器(在 GKE 上)时出现“404 未找到”

所以我已经向 GKE 部署了一个 GRPC 服务,并通过在 python 中连接和调用来确认它可以工作……但我的目标是创建一个前端 Web 应用程序,而不仅仅是使用 python。

所以我有一个简单的 React 应用程序,它使用 grpc-web 进行连接,但是在进行任何 api 调用时我得到一个“404(未找到)”错误。

这是我用来部署服务的 yaml 文件。

起初我遇到了 CORS 错误,但通过添加第 48-52 行并创建一个服务于 HTTP1 的新服务来解决这个问题。

什么可能导致 404 错误?

0 投票
1 回答
835 浏览

kubernetes - 如何在 Minikube 中为 gRPC 服务设置特使代理?

我正在研究一个小 gRCP API,但遇到了一个小问题。我希望可以从 React 前端访问 gRPC 服务,这意味着我需要一个能够转换 gRPC -> HTTP1 的特使代理,反之亦然。

TL;DR我想我可以联系到特使代理,但代理没有正确路由到我的服务。

我将把服务信息放在这里并解释下面发生的事情。

我的每个服务的 K8s(部署和服务)yaml 文件:
模拟部署

Envoy 配置文件和 docker 镜像
Envoy Config
Envoy Dockerfile

这是一个快速的健全性检查,确保我的服务正常工作,忽略特使代理:

所以据我了解,这个特使代理应该接受端口 9091 上的连接,然后将它们重新路由到端口 9090 上的地址 sim-dep(K8s DNS 正在运行)。
这是我在 React 上运行时的代码和错误我的主机上的应用程序(不在 minikube 中)。

日志:

我假设这意味着它无法在某个级别连接,但该错误不是很具有描述性。我也无法通过特使代理卷曲,但我确实尝试使用 PostMan 发送请求并得到了这个:

在此处输入图像描述

我不太确定该怎么做,但它似乎正在到达特使,但没有到达服务。我将不胜感激任何帮助!:) 如果我错过了这里的任何信息,请告诉我。谢谢!

0 投票
0 回答
1212 浏览

docker - gRPC-web 无法连接服务器(代理配置问题)

我正在尝试创建一个 grpc-web 客户端来连接到我的 grpc 服务器。我已经有了用 C++ 编写的 grpc 服务器,它与 C# 客户端配合得很好,一切正常并经过测试。现在我正在尝试创建一个 js 客户端来连接到我的服务。所以我期望返回一个简单的“你好”给我,但我得到的是:“net::ERR_CONNECTION_REFUSED”。

我已经放弃了本教程:hello world,还尝试了一个:来自 grpc-web 的 fron proxy

我已经成功生成了原型文件。我的客户看起来像这样:

我感到困惑的是我必须在 docker 中运行的代理,所以我怀疑它搞砸了。我的 envoy.yaml 文件如下所示:

和 Docker 文件:

我使用“ npx webpack client.js”来创建 main.js。

要启动特使代理,我按照教程中的说明进行操作:

在启动我的服务器后,运行 docker 的东西并启动我的网络:

我得到了我一开始提到的那个错误。我在考虑 CORS 阻塞,但它在特使文件中启用。我真的很感激任何帮助。

@@编辑

所以我也尝试过envoy-frontcurl ,但我在那个例子中的指令有问题。主要是我得到:Invoke-WebRequest : Unable to connect to the remote server。我怀疑它与我的 docker 机器有关,但我不知道是什么。哦,我使用的是 Docker-Toolbox 而不是 Docker for Windows,因为 mym 系统不支持 Docker for Windows。

0 投票
1 回答
2141 浏览

javascript - 本地主机上带有 TLS 的 web gRPC

我有一个使用本地受信任证书的 Go 服务器和客户端,它们相互通信完美无缺。现在我也希望 Go 服务器与 web-grpc 实例进行通信。Insecure 不起作用,因为浏览器会强制 HTTP2 通过 TLS 或完全拒绝它。毕竟;无论如何,它也应该适用于生产中的 TLS。另一个问题也是 CORS,我还想不出将其提供给https://github.com/improbable-eng/grpc-web的服务器实现版本以添加原始标头。但首先要做的事情。

我提供了一个简单的 HTML 和 Webpack 构建 JS,我通过 TLS 提供了一个简单的 Golang FileServer。

我首先生成了一个新的 TLS 证书/密钥(已经工作的 Go Server/Client 对成功使用):

然后我将它添加到 macOS 钥匙串中以获得信任:

这是我使用的 Protobuf 文件:

然后构建:

这是我提供的简单 HTML 页面:

然后是JS模块:

像这样使用 Webpack 构建的(输出到./dist/main.js并由 读取index.html):

www.wp-ts.loc测试域在我的域中,/etc/host因此它可以模拟为具有证书的域并将所有流量重新路由到 localhost。

现在这是我在所有大型库开销中似乎都找不到的问题,因为这似乎主要是针对 NodeJS 的。没有凭据的 Webpack 构建器new GCDServiceClient()可以很好地构建,但是浏览器当然不会允许非 TLS 样式(暂时不考虑 CORS)。然后使用凭证作为测试(这当然是危险的,但我一直在尝试,在 grpc-web 样式上找不到好的文档)给出了明显的 NodeJS 问题,它不能使用文件系统:

也许我只是在接近这个完全错误的问题,而且我也知道grpc-web实现仍处于一个非常脆弱的阶段,但是你如何使它能够通过 HTTP2/TLS(带证书)正确连接,也许如果知道得到要添加到https://github.com/improbable-eng/grpc-web的服务器的 CORS 标头,我在端口 3000 添加到我的侦听器中。

对不起,大要点,但我希望有人可以帮助我。我很高兴能开始使用 Go + Browser gRPC/Protobuf :D

非常感谢您!