ошибка :

я есть приложение net core 2.0 и проблема с авторизацией. Я хочу использовать пользовательскую авторизацию со специальным request.header и стандартной аутентификацией по умолчанию. Сначала я добавляю конфигурацию в startup.cs:

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

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

и в HomeController.cs

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

Если я использую неправильный request.header в AuthTokenPolicy, я вижу это. Но в логах вижу ошибку:

System.InvalidOperationException: не указана схема authenticationScheme, и не было найдено DefaultChallengeScheme. \ R \ n в Microsoft.AspNetCore.Authentication.AuthenticationService.d__11.MoveNext () \ r \ n --- Конец трассировки стека из предыдущего расположения, где произошла исключительная ситуация было брошено --- \ r \ n в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () \ r \ n в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (задача задачи) \ r \ n в Microsoft.AspNetCore.Mvc. ChallengeResult.d__14.MoveNext () \ r \ n --- Конец трассировки стека из предыдущего местоположения, где было сгенерировано исключение --- \ r \ n в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () \ r \ n в системе .Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача) \ r \ n в Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.d__19.MoveNext () \ r \ n --- Конец трассировки стека из предыдущего расположения, где было выброшено исключение --- \ r \ n в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () \ r \ na t System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача) \ r \ n в Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.d__17.MoveNext () \ r \ n --- Конец трассировки стека из предыдущего расположения, где исключение было брошено --- \ r \ n в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () \ r \ n в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (задача задачи) \ r \ n в Microsoft.AspNetCore.Mvc. Internal.ResourceInvoker.d__15.MoveNext () \ r \ n --- Конец трассировки стека из предыдущего местоположения, в котором было сгенерировано исключение --- \ r \ n в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () \ r \ n в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача) \ r \ n в Microsoft.AspNetCore.Builder.RouterMiddleware.d__4.MoveNext () \ r \ n --- Конец трассировки стека из предыдущего расположения, где было выброшено исключение --- \ r \ n в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () \ r \ n в System.Runtime.CompilerSe rvices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача) \ r \ n в Microsoft.AspNetCore.Diagnostics.StatusCodePagesMiddleware.d__3.MoveNext () \ r \ n --- Конец трассировки стека из предыдущего расположения, в котором было сгенерировано исключение --- \ r \ n в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () \ r \ n в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача) \ r \ n в React.AspNet.BabelFileMiddleware___ () \ n --- Конец трассировки стека из предыдущего местоположения, где было сгенерировано исключение --- \ r \ n в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () \ r \ n в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification ( Задача) \ r \ n в Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.d__6.MoveNext () \ r \ n --- Конец трассировки стека из предыдущего расположения, где было сгенерировано исключение --- \ r \ n в System.Runtime .ExceptionServices.ExceptionDispatchInfo.Throw () \ r \ n в System.Runtime.CompilerServices.TaskAwaiter.Han dleNonSuccessAndDebuggerNotification (Задача) \ r \ n на core.common.Middleware.LoggingMiddleware.d__3.MoveNext () в D: \ Dev \ microservicePDP \ Template \ core.common \ Middleware \ LoggingMiddleware.cs: строка 72

После прочтенияМиграция аутентификации и идентификации в ASP.NET Core 2.0 Я добавил этот код в startup.cs

Цитата из статьи:

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

Определите схему по умолчанию в 2.0, если выполняется одно из следующих условий: Вы хотите, чтобы пользователь автоматически входил в систему. Вы используете атрибут [Authorize] или политики авторизации без указания схем

Я добавил AuthenticationScheme и DefaultChallengeScheme в ConfigureServices. Это не помогло, та же ошибка здесь. Я попытался использовать app.UseAuthentication (); в Configure в StartUp.cs результатов нет. Может кто-нибудь объяснить, как использовать пользовательскую авторизацию без аутентификации?

Ответы на вопрос(5)

Ваш ответ на вопрос