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) решена проблема.