Dependency Inject ClaimsPrincipal в DbContext при использовании EasyAuth в функциях Azure 2.0 - PullRequest
2 голосов
/ 05 июня 2019

Использование функций Azure 2.0 с EasyAuth (опция Azure в один клик для включения аутентификации на основе рекламы Azure).

Это позволяет мне получить ClaimsPrincipal в определении функции

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

Это здорово, но я бы хотел иметь возможность доступа к текущему идентификатору пользователя в моем DbContext, чтобы я мог использовать функцию EFCore HasQueryFilter для усечения безопасности.

Мой DbContext внедряется в мой класс конечной точки функции Azure, я бы предпочел оставить его таким, а не создавать его вручную в конечной точке.

Хотя я мог бы, вероятно, установить свойство для своего контекста при каждом запросе, я бы предпочел иметь возможность вставлять ClaimsPrincipal или его части в DbContext посредством внедрения зависимостей, поэтому мне не нужно делать это вручную в каждой функции.

ClaimsPrincipal, по-видимому, не подключен для внедрения по умолчанию, и я не нашел другой класс, который я могу внедрить, который имеет к нему доступ.

1 Ответ

3 голосов
/ 05 июня 2019

Зарегистрировав 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
    }

}

...