【问题标题】:Python grpc interceptor and user authenticationPython grpc 拦截器和用户认证
【发布时间】:2021-10-14 07:36:36
【问题描述】:

我有一个 python grpc 服务,它具有需要了解用户信息的 API 方法,例如用户名电子邮件地址以进行各种过滤。

我有一个 python 服务器端 grpc 拦截器附加到服务,该服务解码 jwt(通过客户端的请求上下文传递)以获取声明并验证真实性。如果令牌无效,拦截器将中止调用,并从令牌中解码声明列表。但问题是我需要能够将 jwt 声明信息传递到我的 API 方法中,以便他们可以使用该信息进行过滤(理想情况下,我希望能够将解码的用户名附加到所有 api 调用的日志中拦截器)。

看起来,在拦截器中,我应该能够将从令牌解码的用户名声明添加到上下文并将其传递给 API 方法?但是我还没有找到任何关于如何修改上下文的文档。

我的 API 确实可以使用令牌访问上下文,并且可以自己为声明进行解码,但在我看来,添加一个装饰器或方法来解码每个 API 方法定义的令牌似乎很奇怪。

【问题讨论】:

  • 我没有在 Python 中编写过拦截器,但是在 Golang 中,在拦截器中,您可以从上下文中获取调用的元数据,我假设您可以在调用处理程序之前对其进行更新;如果用户未经过身份验证,我的身份验证处理程序根本不会调用处理程序并返回错误。我假设 Python SDK 有类似的东西。
  • 我可以读取拦截器中的上下文,但它似乎是只读的。有什么办法可以修改吗?
  • 你引起了我的兴趣。我要自己试试这个。我没有太多使用 Python SDK。您是否也尝试过向 SDK 维护人员寻求帮助?这可能是有成效的。不幸的是,gRPC 文档(通常)并不全面。
  • 我认为(!?)handler_call_details 可能支持set_trailing_metadata(参见:github.com/grpc/grpc/blob/…
  • 不,这行不通。

标签: grpc interceptor grpc-python


【解决方案1】:

grpc/python 团队对读/写能力很感兴趣。据我所知,存储库维护者回复了issue,而 grpc/python 上的examples 只显示了如何读取,而不是写入。所以现在,看起来没有办法通过 python 实现来操纵它。对于服务器端,操作客户端负载的唯一选择是在服务端做一些事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-11
    • 1970-01-01
    • 2017-04-24
    • 1970-01-01
    • 2023-01-22
    • 1970-01-01
    • 2019-07-15
    相关资源
    最近更新 更多