Ошибка при попытке настроить аутентификацию на основе политик в. net CORE - PullRequest
0 голосов
/ 06 августа 2020

Я следую руководству Microsoft здесь: https://docs.microsoft.com/en-us/aspnet/core/security/authorization/policies?view=aspnetcore-3.1

После того, как я запустил свой API и попал в конечную точку, я получаю сообщение об ошибке

InvalidOperationException: No authenticationScheme was specified, and there was no DefaultChallengeScheme found. The default schemes can be set using either AddAuthentication(string defaultScheme) or AddAuthentication(Action<AuthenticationOptions> configureOptions).

Однако глядя на руководство, похоже, нет мест, где они использовали бы AddAuthentication

Я заметил, что могу избежать ошибки, если я успешно проведу проверку политики, например

        protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, MinimumRequirement requirement)
        {
         
            //If I comment this line I get error
            context.Succeed(requirement);
  
            return Task.CompletedTask;
        }

РЕДАКТИРОВАТЬ: Вот мой запуск:

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();
            services.AddHttpContextAccessor();//Required for using  IHttpContextAccessor
          
            services.AddSingleton<IAuthorizationHandler,MinimumHandler>();
            services.AddAuthorization(options => options.AddPolicy("MinimumPolicy", policy => policy.Requirements.Add(new MinimumRequirement())));

        }

Вот мой обработчик:

    public class MinimumHandler : AuthorizationHandler<MinimumRequirement>
    {
        IHttpContextAccessor _httpContextAccessor = null;
        public MinimumHandler(IHttpContextAccessor httpContextAccessor)
        {
            _httpContextAccessor = httpContextAccessor;
        }

        protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, MinimumRequirement requirement)
        {
         
            //If I uncomment this line everything works fine
           //context.Succeed(requirement);
            return Task.CompletedTask;
        }
    }

1 Ответ

0 голосов
/ 06 августа 2020

AddAuthentication в файле startup.cs, а также context.Succeed (требование); эта строка является ключевой для проверки политики.

...