InvalidOperationException: нет IAuthenticationSignInHandler настроен для обработки входа в схему: MyCookieAuthenticationScheme

Я пытаюсь следовать инструкциям здесь чтобы добавить аутентификацию Cookie на мой сайт.

до сих пор я добавил следующее:

вызовите метод UseAuthentication в методе Configure Запуск.cs файл:

app.UseAuthentication();

вызовите методы AddAuthentication и AddCookie в ConfigureServices метод запуска.cs файл:

services.AddAuthentication("MyCookieAuthenticationScheme")
    .AddCookie(options => {
    options.AccessDeniedPath = "/Account/Forbidden/";
    options.LoginPath = "/Account/Unauthorized/";
});

в моем коде входа я тогда есть

await HttpContext.SignInAsync("MyCookieAuthenticationScheme", principal);

principle - это ClaimsPrincipal.

при входе на мой сайт и вызове строки выше я получаю сообщение об ошибке:

InvalidOperationException: нет IAuthenticationSignInHandler настроено для обработки входа в схему: MyCookieAuthenticationScheme

что я пропустил?

2 ответов


Вы сказали, что хотите, чтобы схема по умолчанию была " MyCookieAuthenticationScheme "(это первый аргумент AddAuthentication) но вы не добавили обработчик аутентификации с этим именем. Когда вы позвонили AddCookies, вы добавили обработчик со схемой "Cookies" (это значение по умолчанию).

вам нужно изменить ваш код:

services.AddAuthentication("MyCookieAuthenticationScheme")
    .AddCookie("MyCookieAuthenticationScheme", options => 
    {
        options.AccessDeniedPath = "/Account/Forbidden/";
        options.LoginPath = "/Account/Unauthorized/";
    });

см. эту статью, чтобы лучше понять примитивы:

https://digitalmccullough.com/posts/aspnetcore-auth-system-demystified.html


попробуйте изменить место вызова services.AddAuthentication( это помогло мне.

public IServiceProvider ConfigureServices(IServiceCollection services)
{
    ...
    var builder = new ContainerBuilder();
    builder.RegisterModule(new HowResolveDependencies());

    services.AddTransient<IExceptionHandler, ExceptionToResponseWriter>();

    builder.Populate(services);

    services.AddAuthentication(AuthConsts.MainAuthScheme)
                 .AddCookie(
    ...
}

в моем проекте, разместив services.AddAuthentication до builder.Populate(services) решена проблема.