No se especificó autenticaciónScheme, y no se encontró DefaultChallengeScheme con autenticación predeterminada y autorización personalizada

Tengo una aplicación net core 2.0 y un problema con la autorización. Quiero usar una autorización personalizada con una solicitud especial de autenticación predeterminada de encabezado y encabezado. Primero, agrego la configuración en startup.cs:

public IServiceProvider ConfigureServices(IServiceCollection services)
{
  ...
services.AddAuthorization(options =>
            {
                options.AddPolicy(DefaultAuthorizedPolicy, policy =>
                {
                    policy.Requirements.Add(new TokenAuthRequirement());
                });
            });
services.AddSingleton<IAuthorizationHandler, AuthTokenPolicy>();
  ...
}

y AuthTokenPolicy.cs

public class AuthTokenPolicy : AuthorizationHandler<TokenAuthRequirement>
{   
    protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, TokenAuthRequirement requirement)
    {
        var filterContext = context.Resource as AuthorizationFilterContext;
        var response = filterContext.HttpContext.Response;
        try
        {
            // some validation code

            var isValidToken = isValidTokenTask.Result;
            if (!isValidToken)
            {
                response.StatusCode = 401;
                return Task.CompletedTask;
            }

            response.StatusCode = 200;
            context.Succeed(requirement);
        }
        catch (Exception)
        {
            return Task.CompletedTask;
        }
        return Task.CompletedTask;
    }
}

y en HomeController.cs

[Authorize(Policy = Startup.DefaultAuthorizedPolicy)]
    public async Task<IActionResult> IsVisible()

Si uso request.header incorrecto en AuthTokenPolicy, lo veo. Pero en los registros veo error:

System.InvalidOperationException: no se especificó autenticaciónScheme, y no se encontró DefaultChallengeScheme. \ R \ n en Microsoft.AspNetCore.Authentication.AuthenticationService.d__11.MoveNext () \ r \ n --- Fin del seguimiento de la pila desde la ubicación anterior donde la excepción se lanzó --- \ r \ n en System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () \ r \ n en System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Task task) \ r \ n en Microsoft.AspNetCore.Mvc. ChallengeResult.d__14.MoveNext () \ r \ n --- Fin del seguimiento de la pila desde la ubicación anterior donde se produjo la excepción --- \ r \ n en System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () \ r \ n en System .Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Task task) \ r \ n at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.d__19.MoveNext () \ r \ n --- Fin del seguimiento de la pila desde la ubicación anterior donde se produjo la excepción --- \ r \ n en System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () \ r \ na t System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Task task) \ r \ n at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.d__17.MoveNext () \ r \ n --- Fin del seguimiento de la pila desde la ubicación anterior, donde la excepción se lanzó --- \ r \ n en System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () \ r \ n en System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Task task) \ r \ n en Microsoft.AspNetCore.Mvc. Internal.ResourceInvoker.d__15.MoveNext () \ r \ n --- Fin del seguimiento de la pila desde la ubicación anterior donde se produjo la excepción --- \ r \ n en System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () \ r \ n en System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Task task) \ r \ n en Microsoft.AspNetCore.Builder.RouterMiddleware.d__4.MoveNext () \ r \ n --- Fin del seguimiento de la pila desde la ubicación anterior donde se produjo la excepción --- \ r \ n en System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () \ r \ n en System.Runtime.CompilerSe rvices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Task task) \ r \ n en Microsoft.AspNetCore.Diagnostics.StatusCodePagesMiddleware.d__3.MoveNext () \ r \ n --- Fin del seguimiento de la pila desde la ubicación anterior donde se produjo la excepción --- \ r \ n en System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () \ r \ n en System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Task task) \ r \ n en React.AspNet.BabelFileMiddleware.d__5 \ n --- Fin del seguimiento de la pila desde la ubicación anterior donde se produjo la excepción --- \ r \ n en System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () \ r \ n en System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification ( Tarea de tarea) \ r \ n en Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.d__6.MoveNext () \ r \ n --- Fin del seguimiento de la pila desde la ubicación anterior donde se produjo la excepción --- \ r \ n en System.Runtime .ExceptionServices.ExceptionDispatchInfo.Throw () \ r \ n en System.Runtime.CompilerServices.TaskAwaiter.Han dleNonSuccessAndDebuggerNotification (tarea de tarea) \ r \ n en core.common.Middleware.LoggingMiddleware.d__3.MoveNext () en D: \ Dev \ microservicePDP \ Template \ core.common \ Middleware \ LoggingMiddleware.cs: línea 72

Despues de leerMigración de autenticación e identidad a ASP.NET Core 2.0 He agregado este código en startup.cs

Cita del artículo:

services.AddAuthentication(options => 
{
    options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
});

Defina un esquema predeterminado en 2.0 si se cumple una de las siguientes condiciones: Desea que el usuario inicie sesión automáticamente. Utiliza el atributo [Autorizar] o las políticas de autorización sin especificar esquemas.

Agregué AuthenticationScheme y DefaultChallengeScheme en ConfigureServices. No fue ayuda, el mismo error aquí. He intentado usar app.UseAuthentication (); en Configurar en StartUp.cs, no hay resultados. ¿Alguien puede explicar cómo usar la autorización personalizada sin autenticación?

Respuestas a la pregunta(5)

Su respuesta a la pregunta