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