首页 > 解决方案 > 用于 gRPC 服务的 ASP.NET Core MVC 过滤器模拟

问题描述

我有一个在 ASP.NET Core 3.0 上运行的现有 REST API。它使用 MVC 过滤器根据标头值执行授权检查,并在授权失败的情况下返回错误,以便不会将请求传递给控制器​​。

现在,我正在试验 gRPC 并尝试将此 API 移植到 gRPC 服务。但是,我没有看到任何明显的解决方案可以作为 MVC 过滤器的替代品。

有没有办法实现类似的授权检查功能,也许使用元数据

标签: c#asp.net-coregrpcasp.net-core-middleware

解决方案


根据您是否使用Grpc.Core,这将有稍微不同的答案,它是最初由 Google 开发的 C GRPC 库的包装器,它已经可用了一段时间并支持各种 .Net 目标(包括框架) ,或者如果您使用的是新的Grpc.AspNetCore,它与 .Net Core 3.0 一起启动,并且构建在 Kestrel 和 ASP.NET Core 内部。

Grpc.Core

对于 Grpc.Core,您可能希望将标头值作为元数据传递,然后创建一个服务器端拦截器来处理元数据和请求。您也可以考虑使用AsyncAuthInterceptor,但是客户端的核心 Grpc 实现不会通过不安全(非 TLS)连接发送凭据。

Grpc.AspNetCore

Grpc.AspNetCore 建立在 ASP.NET 之上,可以使用 ASP.NET 中间件,包括默认的 ASP.NET 身份验证。如果您可以将过滤器转换为中间件,您将能够在两个实现之间共享身份验证。


推荐阅读