使用gRPC自定义基于通道的身份验证

时间:2018-06-06 16:22:03

标签: c# authentication .net-core basic-authentication grpc

如何在dotnet中使用gRPC进行简单的通道验证?

我想在通道连接期间仅传递客户端计算机名称和客户端服务名称,然后能够在服务器中获取一次,作为识别请求来自何处的方式。

我不想在每次调用中将它们作为元数据传递,我不想为此实现其他方法。我一直在查看文档,并尝试实现一些抽象类,如TypeError: unable to convert a Python 'QBrush' object to a C++ 'QColor' instance,但我不知道如果它甚至可能由于一些内部类而无法完成。

当然我不想为此使用SSL证书,也不想使用OAuth2。

1 个答案:

答案 0 :(得分:1)

元数据中的身份验证数据

将它们传递给元数据一个很好的解决方案。看看hpack。你的标题将被压缩,只需几个字节。

您无法将您的身份验证数据绑定到通道,因为在HTTP / 2中无法保证,相同的TCP通道将用于后续调用。

那就是说,我还在等待基于元数据的自定义身份验证的GRPC java团队的正确示例。

基于流的身份验证

如果您想在同一API的后续调用之间保存身份验证数据,也可以选择基于流的身份验证。在我的解释中,这意味着,您必须仅在流的开头传递身份验证数据。然后,您的StreamObserver可以保存身份验证数据,并在后续的onNext()调用中重复使用它。我使用这种方法,效果很好。

实施例

service MyService {
  rpc myFunction(stream MyMessage) returns (stream MyResponse)
}
message MyMessage {
  string user = 1;
  string password = 2;

  int32 myMessageVariable = 3;
}

用户/密码只应在onNext(myMessage)的第一个requestObserever来电中设置。 这也非常有效,因为在线路上,流由StreamId表示,StreamId是一个单字节(取决于您同时打开了多少个流)。