首页 > 解决方案 > 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
}

标签: c#asp.netazureauthorization

解决方案


编写一个中间件,检查请求是否来自 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();
}

推荐阅读