c# - 用于 gRPC 服务的 ASP.NET Core MVC 过滤器模拟
问题描述
我有一个在 ASP.NET Core 3.0 上运行的现有 REST API。它使用 MVC 过滤器根据标头值执行授权检查,并在授权失败的情况下返回错误,以便不会将请求传递给控制器。
现在,我正在试验 gRPC 并尝试将此 API 移植到 gRPC 服务。但是,我没有看到任何明显的解决方案可以作为 MVC 过滤器的替代品。
有没有办法实现类似的授权检查功能,也许使用元数据?
解决方案
根据您是否使用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 身份验证。如果您可以将过滤器转换为中间件,您将能够在两个实现之间共享身份验证。
推荐阅读
- ios - 使用结构而不是数组填充 UITableView 数据源
- google-app-engine - 限制我的 Google App Engine 应用程序访问 Google API 密钥
- javascript - 显示JS函数的返回值
元素
- ios - 使用 iTMSTransporter 更新应用内购买?
- java - 对于 AWS Lambda,Build Native 太慢了
- java - 带参数的本机查询 - 在文本值中转义双引号
- java - Java用括号分割字符串
- r - 为数据帧中的每个组分配随机整数
- javascript - 如何使用单击事件侦听器制作按钮切换显示?
- php - 为什么我的 PHP recaptcha 联系表没有将消息发送到指定的电子邮件?