相当于golang的PerRPCCredentials的python gRPC

问题描述 投票:0回答:1

我已经在golang中实现了一个gRPC服务器,该服务器需要自定义授权信息,即电子邮件和api_key(通过TLS加密的连接)。在golang中,我可以使用PerRPCCredentials轻松实现客户端,该过程只需创建一个元数据映射,例如{“ email”:电子邮件,“ api_key”:apiKey}。 (然后,我在服务器端使用StreamInterceptor从传入的上下文中提取它们,然后对其进行验证)。但是,我不知道如何为python客户端做等效的工作。我尝试实现此处https://github.com/grpc/grpc/tree/master/examples/python/auth中记录的AuthMetadataPlugin,并在此处进行示例: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服务器可以将其从传入上下文中拉出?

python authentication http-headers authorization grpc
1个回答
0
投票

这确实有效,我将凭据以错误的顺序传递给复合作曲者-必须先使用tls凭据。

© www.soinside.com 2019 - 2024. All rights reserved.