将Azure Functions 2.0与EasyAuth一起使用(Azure一键式选项可启用针对Azure广告的身份验证)。
这使我可以在函数定义中获得ClaimsPrincipal
public async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]HttpRequest req, ClaimsPrincipal principal)
那很好,但是我很希望能够在我的DbContext中访问当前的userId,因此我可以使用EFCore HasQueryFilter功能进行安全修整。
我的DbContext被注入到我的azure函数端点类中,我宁愿保持这种方式,而不是在端点中手动创建它。
虽然我可以在每个请求的上下文中设置一个属性,但我希望能够通过依赖注入将ClaimsPrincipal或它的一部分注入DbContext中,因此我不需要在每个函数中手动进行操作。
默认情况下,ClaimsPrincipal似乎并没有为注入而接线,我也没有弄清楚可以注入的另一个可以访问它的类。
答案 0 :(得分:3)
通过注册IHttpContextAccessor在启动时进行注入
public void Configure(IWebJobsBuilder builder)
{
builder.Services.AddHttpContextAccessor();
}
然后可以在dbcontext中使用它
public DbContext(DbContextOptions<DbContext> options, IHttpContextAccessor httpContextAccessor) : base(options)
{
if (httpContextAccessor != null)
{
var principal = httpContextAccessor.HttpContext.User;
//do stuff here with principal
}
}