python-gRPC等价于golang的perrpcredentials

2024-09-30 18:33:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我在golang实现了一个gRPC服务器,它需要自定义授权信息,即电子邮件和api\ U密钥(通过TLS加密连接)。在golang中,我可以使用perrpcredentials轻松实现客户机,它只需创建一个元数据映射,如{“email”:email,“api\u key”:apiKey}。(然后我在服务器端使用StreamInterceptor从传入上下文中提取它们,然后验证它们)。但是,我不知道如何对python客户机执行等效操作。我已经尝试实现了一个AuthMetadataPlugin,如这里的文档https://github.com/grpc/grpc/tree/master/examples/python/auth和这里的示例:https://github.com/grpc/grpc/blob/master/examples/python/auth/customized_auth_client.py

class AuthMetadataPlugin:
  def __init__(self, email, api_key):
    self.email = email
    self.api_key = api_key
  def __call__(self, context, callback):
    callback((('email', self.email), ('api_key', self.api_key)), None)

但是我得到以下错误:TypeError: Cannot convert grpc._cython.cygrpc.MetadataPluginCallCredentials to grpc._cython.cygrpc.ChannelCredentials 当我调用grpc.metadata_call_credentials(AuthMetadataPlugin(email, api_key))时。你知道吗

更令人困惑的是,许多文档似乎都在讨论添加自定义HTTP头,但我只希望每个(流)RPC调用发送一次授权信息,而不是在这些调用的每个HTTP帧中发送。(无可否认,我不确定它在golang中是如何工作的,但是我知道我的StreamInterceptor在每次流式RPC调用中只被调用一次)。你知道吗

如何将此授权信息添加到python中的RPC调用中,以便golang gRPC服务器可以将其从传入上下文中拉出?你知道吗


Tags: key文档self服务器authapi信息grpc