Azure Functions .net 6 中的策略授权

Posted

技术标签:

【中文标题】Azure Functions .net 6 中的策略授权【英文标题】:Policy Authorization in Azure Functions .net 6 【发布时间】:2021-12-22 15:51:17 【问题描述】:

我正在尝试从我在 Web 应用程序中开发的 REST API 迁移到 Azure Functions。在 Web 应用程序中,我使用带有以下策略的“授权”属性装饰:

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

代码使用 JWT 令牌进行身份验证和 ASP.NET Core 标识。 我的问题是有什么方法可以在 .net 6 中使用 Azure Functions v4 来完成策略?也许是自定义中间件?

【问题讨论】:

【参考方案1】:

首先,Azure Functions 没有任何中间件的概念,除了filters,在撰写本文时preview。

但 Azure Functions 支持常规 dependency injection,因此您可以添加自定义服务。例如,其中一项服务是 AddJwtBearer 由 Microsoft.AspNetCore.Authentication.JwtBearer 包提供给您的。

我们将使用Microsoft.Identity.Web (MIW),而不是使用 playn JwtBearer 中间件。 MIW 最酷的地方在于,它简化了您需要执行的大多数常见操作和操作。它还使用Microsoft Graph 或调用any other API 超级简单!

更多参考资料,请参考about custom middleware in azure functions 和this。

【讨论】:

Ofc 它有一个中间件的概念。 docs.microsoft.com/en-us/azure/azure-functions/… 过滤器也不是一个好主意。它们已被标记为“预览版”好几年了,从那以后就再也没有动过。 您使用的是 .Net 6 隔离版本。隔离模型使您可以完全控制语言工作者启动配置,并提供依赖注入和中间件等有用的功能。如果是,请参考这里 - docs.microsoft.com/en-us/azure/azure-functions/…【参考方案2】:

我会推荐你​​使用这个包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 */
    

有关此blog post 的更多信息。

【讨论】:

以上是关于Azure Functions .net 6 中的策略授权的主要内容,如果未能解决你的问题,请参考以下文章

Azure Functions .NET Core 中的 EF Core 2.0 连接字符串

如何在 .NET 5 隔离进程中使用 Azure Functions v3 时添加以前在 Startup.cs 中的代码->配置方法

如何在 Visual Studio 中使用 .NET 5(独立进程)调试 Azure Functions?

如何将 Azure Functions v3 迁移到 .net core 5.0

更新到 Microsoft.Net.Functions 3.0.3 后如何正确设置 Azure 队列触发器?

.NET 5 支持 Azure Functions OpenAPI 扩展啦