c# - Azure 服务的 C# 授权筛选器?
问题描述
问题:是否有 ASP.NET Web API 的过滤器可以过滤请求以仅允许来自其他 azure 服务的调用?
像这样的授权过滤器存在于它可以读取策略的位置,但如果说该服务必须调用另一个 azure 服务以获取一些附加信息,我希望能够将该受保护端点专门用于其他 azure 服务互动。最好的方法是什么?
[HttpGet("HQClient/{clientID}")]
[Authorize(Policy = "read:clients")]
public async Task<ActionResult<HQClient>> GetHQClientByID(Guid clientID)
{
// Implementation
}
解决方案
编写一个中间件,检查请求是否来自 azure 服务,并从启动类(asp.net 核心)或 MVCApplication 类方法(asp.net MVC)中的“配置”方法调用它
public void Configure(IApplicationBuilder app)
{
app.Use(async (context, next) =>
{
//write the code that check for azure services then..
//this calls the next delegate/middleware in the pipeline
await next();
});
}
您还可以编写自定义过滤器并在那里执行逻辑
//sample filter
class AuthorizeOnlyAzureServices : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
//check for azure services
}
}
//sample filter usage
public class HomeController : Controller
{
[AuthorizeOnlyAzureServices]
public ActionResult Index()
{
return View();
}
}
您也可以类似地使用属性
//sample attribute
public class AuthorizeOnlyAzureServicesAttribute : System.Attribute
{
public AuthorizeOnlyAzureServicesAttribute(HttpRequest request)
{
//check that the request is from azure service
}
}
//sample usage
[AuthorizeOnlyAzureServices(System.Web.HttpContext.Current.Request)]
public ActionResult Index()
{
//code goes here
return View();
}
推荐阅读
- protocol-buffers - protobuf的生成代码在两个mac之间是不同的
- graphics - Raycaster,寻找更有效的地板/天花板光线投射
- vue.js - 为什么当我构建我的 vue 应用程序时,我的 bootstrap-vue 的 datepicker 会改变外观?
- ruby-on-rails - 如何使用 Devise 和 STI 在 Rails 中向用户类型添加自定义字段?
- graph - SPARQL 查询以根据属性值比较从不同的图创建合并图
- python-3.x - 从控制台(测试)和通过 AWS Gateway REST API 调用时,Lambda 的行为有所不同
- ruby - rubymine 中是否有可用于breakman 的插件?
- java - 如何在springBoot应用程序(application.properties)中配置“idle_in_transaction_session_timeout”数据库属性
- c++ - QT c++:插入多行编辑
- php - 如何在 Mailjet 分页中获取最后一页或总记录