Обход по умолчанию AuthorizeFilter в .NET Core 2.1 - PullRequest
0 голосов
/ 27 июня 2018

Я недавно обновил свое приложение .NET Core с 2.0 до 2.1.

У меня есть фильтр авторизации, который я добавляю при запуске:

var posBearerPolicy = new AuthorizationPolicyBuilder()
    .AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme‌​)
    .RequireAuthenticatedUser()
    .AddRequirements(new POSBearerRequirement())
    .Build();

services.AddMvc(options =>
{
    options.Filters.Add(new BearerAuthorizeFilter(posBearerPolicy));
});

В методе OnAuthorizationAsync BearerAuthorizeFilter у меня есть следующая логика:

public override Task OnAuthorizationAsync(AuthorizationFilterContext context)
{
    if (context.Filters.Count(f => f is AuthorizeFilter) > 1 || context.Filters.Any(f => f is AllowAnonymousFilter))
    {
        return Task.CompletedTask;
    }

    return base.OnAuthorizationAsync(context);
}

Это работает именно так, как я хочу в .NET Core 2.0. У меня есть политика авторизации по умолчанию, которая применяется ко всем моим контроллерам. Если я хочу переопределить эту политику, я просто добавляю атрибут [Authorize (NAME)] в мой контроллер. В этом OnAuthorizationAsync он обнаружит несколько атрибутов AuthorizeFilter на контроллере, а затем применяет только те политики, которые я переопределил для этого конкретного контроллера.

Однако после обновления до .NET Core 2.1 мой posBearerPolicy выше всегда применяется. У меня есть контроллер API с пользовательским атрибутом, который наследуется от AuthorizeAttribute, для которого определена собственная политика и все настроено во время запуска.

Даже когда это

return Task.CompletedTask;

линия получена, фреймворк все еще применяет мою posBearerPolicy.

Кто-нибудь знает, что мне не хватает? Что заставило это измениться в .NET Core 2.1? Как мне переписать метод OnAuthorizationAsync, чтобы он пропустил / пропустил политику, если присутствует несколько AuthorizationFilters?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...