在 Azure Functions 2.0 中使用 EasyAuth 时,依赖项将 ClaimsPrincipal 注入 DbContext

Bet*_*tty 2 c# azure entity-framework-core azure-functions

将 Azure Functions 2.0 与 EasyAuth 结合使用(Azure 一键选项以启用针对 azure 广告的身份验证)。

这允许我在函数定义中得到一个 ClaimsPrincipal

public async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]HttpRequest req, ClaimsPrincipal principal)
Run Code Online (Sandbox Code Playgroud)

这很棒,但我希望能够访问 DbContext 中的当前 userId,以便我可以使用 EFCore HasQueryFilter 功能进行安全调整。

我的 DbContext 被注入到我的 azure 函数端点类中,我更愿意保持这种方式,而不是在端点中手动创建它。

虽然我可能可以在每个请求的上下文中设置一个属性,但我更希望能够通过依赖项注入将 ClaimsPrincipal 或其部分注入到 DbContext 中,这样我就不需要在每个函数中手动执行此操作。

ClaimsPrincipal 默认情况下似乎没有连接用于注入,我也没有找到可以注入的另一个可以访问它的类。

Bet*_*tty 5

通过注册 IHttpContextAccessor 以在启动时注入

   public void Configure(IWebJobsBuilder builder)
   {
            builder.Services.AddHttpContextAccessor();
   }
Run Code Online (Sandbox Code Playgroud)

然后您可以在 dbcontext 中使用它

public DbContext(DbContextOptions<DbContext> options, IHttpContextAccessor httpContextAccessor) : base(options)
{
    if (httpContextAccessor != null)
    {
        var principal = httpContextAccessor.HttpContext.User;
        //do stuff here with principal
    }
Run Code Online (Sandbox Code Playgroud)

}