如何在dotnet中使用gRPC进行简单的通道验证?
我想在通道连接期间仅传递客户端计算机名称和客户端服务名称,然后能够在服务器中获取一次,作为识别请求来自何处的方式。
我不想在每次调用中将它们作为元数据传递,我不想为此实现其他方法。我一直在查看文档,并尝试实现一些抽象类,如TypeError: unable to convert a Python 'QBrush' object to a C++ 'QColor' instance
,但我不知道如果它甚至可能由于一些内部类而无法完成。
当然我不想为此使用SSL证书,也不想使用OAuth2。
答案 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是一个单字节(取决于您同时打开了多少个流)。