Nenhum authenticationScheme foi especificado e não foi encontrado DefaultChallengeScheme com autenticação padrão e autorização customizada

Eu tenho um aplicativo net core 2.0 e um problema com a autorização. Quero usar a autorização personalizada com request.header especial e autenticação padrão padrão. Primeiro, adiciono a configuração no startup.cs:

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

e 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;
    }
}

e em HomeController.cs

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

Se eu usar request.header errado no AuthTokenPolicy, eu o vejo. Mas, nos logs, vejo Erro:

System.InvalidOperationException: nenhum authenticationScheme foi especificado e não foi encontrado DefaultChallengeScheme. \ R \ n em Microsoft.AspNetCore.Authentication.AuthenticationService.d__11.MoveNext () \ r \ n --- Fim do rastreamento de pilha do local anterior, onde a exceção foi lançado --- \ r \ n em System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () \ r \ n em System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (tarefa de tarefa) \ r \ n em Microsoft.AspNetCore.Mvc. ChallengeResult.d__14.MoveNext () \ r \ n --- Fim do rastreamento de pilha do local anterior onde a exceção foi lançada --- \ r \ n em System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () \ r \ n em System .Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (tarefa Task) \ r \ n em Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.d__19.MoveNext () \ r \ n --- Fim do rastreamento de pilha do local anterior onde a exceção foi lançada --- \ r \ n em System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () \ r \ na t System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (tarefa Task) \ r \ n em Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.d__17.MoveNext () \ r \ n --- Fim do rastreamento de pilha do local anterior, onde a exceção foi lançado --- \ r \ n em System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () \ r \ n em System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (tarefa de tarefa) \ r \ n em Microsoft.AspNetCore.Mvc. Internal.ResourceInvoker.d__15.MoveNext () \ r \ n --- Fim do rastreamento de pilha do local anterior onde a exceção foi lançada --- \ r \ n em System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () \ r \ n em System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (tarefa Task) \ r \ n em Microsoft.AspNetCore.Builder.RouterMiddleware.d__4.MoveNext () \ r \ n --- Fim do rastreamento de pilha do local anterior onde a exceção foi lançada --- \ r \ n em System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () \ r \ n em System.Runtime.CompilerSe rvices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (tarefa Task) \ r \ n em Microsoft.AspNetCore.Diagnostics.StatusCodePagesMiddleware.d__3.MoveNext () \ r \ n --- Fim do rastreamento de pilha do local anterior onde a exceção foi lançada --- \ r \ n em System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () \ r \ n em System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (tarefa de tarefa) \ r \ n em React.AspNet.BabelFileMiddleware.d__5.MoveNext () \ n --- Rastreio de fim de pilha do local anterior onde a exceção foi lançada --- \ r \ n em System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () \ r \ n em System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification ( Tarefa da tarefa) \ r \ n no Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.d__6.MoveNext () \ r \ n --- Fim do rastreamento da pilha do local anterior onde a exceção foi lançada --- \ r \ n no System.Runtime .ExceptionServices.ExceptionDispatchInfo.Throw () \ r \ n em System.Runtime.CompilerServices.TaskAwaiter.Han dleNonSuccessAndDebuggerNotification (tarefa Task) \ r \ n em core.common.Middleware.LoggingMiddleware.d__3.MoveNext () em D: \ Dev \ microservicePDP \ Template \ core.common \ Middleware \ LoggingMiddleware.cs: linha 72

Depois de lerMigrando autenticação e identidade para o ASP.NET Core 2.0 Eu adicionei esse código no startup.cs

Citações do artigo:

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

Defina um esquema padrão no 2.0 se uma das seguintes condições for verdadeira: Você deseja que o usuário seja conectado automaticamente. Você usa o atributo [Autorizar] ou políticas de autorização sem especificar esquemas

Adicionei AuthenticationScheme e DefaultChallengeScheme no ConfigureServices. Não foi de ajuda, o mesmo erro aqui. Eu tentei usado app.UseAuthentication (); no Configure in StartUp.cs, não há resultados. Alguém pode explicar como usar a autorização personalizada sem autenticação?

questionAnswers(5)

yourAnswerToTheQuestion