我们正在使用 Improbable 的gRPC-Web 库向在浏览器中运行的 Javascript 客户端公开 gRPC 服务(在 Go 中实现)。该服务将与现有的前端 Go 服务并存,该服务托管基于 REST 的 API。现有服务使用基于会话的身份验证对其用户进行身份验证(会话 cookie + 使用双重提交 cookie 的XSRF 保护,这也使用一些每个会话的服务器端状态进行验证)。
前端 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 …
我有一个react-redux应用程序,我的团队使用grpc-web。我想知道 - 设计这种系统的最佳方法是什么?
目前的计划是创建 3 个抽象级别:
API模块 -grpc-web客户端周围的promisified包装器Redux thunks level - 处理 API 的异步动作创建者React components props - 只会询问组件需要什么所以components一无所知grpc,他们与动作创建者混在一起,动作创建者一无所知grpc,他们处理一个api模块,并且只有api模块与grpc-web存根一起使用。
我想走这条路的原因:
我的问题是:
grpc-webAPI是个好主意吗?如果是,编写一个函数并即时执行是否是个好主意?grpc-webAPI,因为这个 API 将来可能会改变我正在尝试在我的 vue 应用程序中使用 grpc-web 客户端,如下所示:
import Vue from "vue";
import App from "./App.vue";
const { Registration, _ } = require("./identity-service_pb.js");
const {
  IdentityServicePromiseClient
} = require("./identity-service_grpc_web_pb.js");
const identityService = new IdentityServicePromiseClient(
  "http://localhost:9000"
);
const req = new Registration();
req.setGender("male");
req.setInterestList(["A", "B", "C"]);
console.log(req);
console.log(identityService);
identityService.signUp(req, {}).then(function(response) {
  console.log(response);
}).catch(function(error) {
  console.error(error);
});
Vue.config.productionTip = false;
new Vue({
  render: h => h(App)
}).$mount("#app");
当应用程序被编译时,编译器会抱怨:
error  in ./src/identity-service_pb.js
Module Error (from ./node_modules/eslint-loader/index.js):
/home/developer/js/identity-client/src/identity-service_pb.js
   27:1   error  'proto' is not defined      no-undef
   28:50  error …在 python/C#/C/Go/... 生成的代码中,可以从 JSON 创建一个 proto 消息实例。例如在 Python 中,你可以只做google.protobuf.json_format.Parse(json, message). 我希望 [JavaScript 生成的代码(此处和此处)提供相同的内容,但不幸的是,情况并非如此。
我目前正在发送我的 JSONStruct并收到相同的回复。所以现在我想把它打包Struct并取回消息。但我不知道怎么做。
option go_package = ".;apps";
package apps;
message ShardKvMap{
  map<string, google.protobuf.Any> data = 1;
}
protoc -I=$DIR test.proto \
  --js_out=import_style=commonjs,binary:$OUT_DIR \
  --grpc-web_out=import_style=typescript,mode=grpcwebtext:$OUT_DIR
我尝试使用下面的代码测试我的 grpc 客户端连接。我有 .net core grpc 服务器并使用 Node js grpc 客户端进行连接。但出现“无法连接到所有地址”错误。但能够将 .net grpc 服务器连接到 .net grpc 客户端。非常感谢任何帮助。
不确定我是否遗漏了下面 grpc 客户端代码中的任何内容。
'use strict';
//Same as the other projects we import fs for reading documents, in this case employees.js json
const fs = require('fs');
//Importing GRPC and the proto loader
const grpc = require('grpc');
const loader = require('@grpc/proto-loader');
//reads the proto
const packageDefinition = loader.loadSync('Repository.proto', {
  keepCase: false,
  longs: String,
  enums: String, 
  defaults: true,
  oneofs: true
});
//Loads the proto file to …我在浏览器上运行了 Asp.net core 和 gRPC...但现在我得到:
info: Grpc.AspNetCore.Server.ServerCallHandler[2]
  Request content-type of 'application/grpc-web' is not supported.
关于如何追踪这个问题有什么想法吗?
我正在使用 grpc-web 通过 gRPC 与 java 后端进行通信。我在前端使用 ReactJS,它使用 grpc-web 来解释 protobuffers。
我收到这个奇怪的错误。我的原型是正确的(我使用名为“bloom”的反射工具进行了检查,因此后端很好)这在某种程度上看起来像是我在 ReactJS 中使用的 grpc 库的内部错误。
我收到以下错误:
TypeError: Cannot read properties of undefined (reading 'MethodInfo')
上述错误指向我的原型文件:dashboard_services_grpc_web_pb.js
在这个文件中,它指向这一行
const methodInfo_DashboardService_userLogin = new grpc.web.AbstractClientBase.MethodInfo( ...... );
我很难解决这个问题,因为根据我的理解,grpc.web.AbstractClientBase这是grpc-web.
我还重新安装了我的node_modules,希望这是版本问题,但无济于事。
我想从 React 客户端将文件发送到服务器。我知道为此我应该使用 grpc 流并将文件分割成块。那么,问题是如何将这些块发送到服务器?
此时允许 CORS 请求的最佳方法是什么?(鉴于 Contour Ingress 中的 CORS 支持目前在“停车场”中)
我的特定用例是托管一个 GRPC 服务,该服务特使反向代理。方便的是,contour 还支持开箱即用的 grpc-web,我们希望将其用于我们的 Web 服务。
但是,鉴于不支持 CORS,我们无法进行跨域请求。
除了让我们的 Web 应用程序使用与 GRPC api 相同的域外,目前还有其他解决方案可以满足我们的需求吗?
基本上,我们希望Envoy 的配置与GRPC Web 示例配置非常相似。
grpc-web ×10
grpc ×7
javascript ×3
reactjs ×2
asp.net-core ×1
blazor ×1
code-first ×1
contour ×1
go ×1
grpc-node ×1
kubernetes ×1
node.js ×1
redux ×1
typescript ×1
vue.js ×1