Azure Functions.net 6中的策略授权



我正在尝试从我在Web应用程序中开发的REST API迁移到Azure函数。在Web应用程序中,我使用";授权";使用类似的策略进行属性装饰

[Authorize(Policy = Permissions.Announcements.Edit)]
[HttpPost]
public IActionResult MyFunction([FromBody] MyDTO dto) 
{ 
/* my code */
}

该代码使用JWT令牌进行身份验证和ASP.NET核心标识。我的问题是,有没有任何方法可以在.net 6中使用Azure函数v4来实现策略?也许是自定义中间件?

首先,Azure函数没有任何中间件的概念,除了过滤器,它们在撰写本文时处于预览状态。

然而,Azure功能支持常规的依赖项注入,因此您可以添加自定义服务。例如,其中一个服务是Microsoft.AspNetCore.Authentication.JwtBearer包带给您的AddJwtBearer

我们将使用Microsoft.Identity.Web(MIW(,而不是使用普通的JwtBearer中间件。MIW很酷的一点是,它简化了您需要执行的大多数常见操作。它还使用Microsoft Graph或调用任何其他API超级简单!

有关更多参考资料,请参阅azure函数中的自定义中间件。

我建议您使用此软件包DarkLoop.Azure.Functions.Authorize

在您的启动类中初始化身份验证:

builder.Services
.AddFunctionsAuthentication();
.AddJwtBearer(options => 
{
//your JWT configuration here just like in ASPNET Core
});
builder.Services.AddFunctionsAuthorization();

然后,您所需要做的就是用FunctionAuthorizeAttribute装饰您的函数或函数类,这样您就可以拥有与WebAPI:中相同的细粒度控制

[FunctionAuthorize(Policy = Permissions.Announcements.Edit)]
[FunctionName("MyFunction")]
public async Task<IActionResult> MyFunction(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "myfunction")] HttpRequest req, ILogger log)
{
var user = req.HttpContext.User;
/* my code */
}

有关此博客文章的更多信息。

最新更新