Я нахожусь в процессе интеграции простого процесса аутентификации в приложение asp.net core 2.1, где пользователи входят в систему через интерфейс пользователя по умолчанию, но есть также возможность получить токен и вызвать некоторые защищенные конечные точки API.чтобы получить некоторые данные, необходимые для создания отчетов.
Проблема, с которой я сталкиваюсь, заключается в том, что при конфигурации по умолчанию все работает, но при добавлении конфигурации токена возникают странные ошибки.
Если я не добавлюAddCookie("Identity.External")
, вызов метода onGet в /Identity/Account/Login
вызывает исключение
InvalidOperationException: для схемы «Identity.External» не зарегистрирован обработчик аутентификации выхода.Зарегистрированные схемы выхода: Identity.Application.Вы забыли вызвать AddAuthentication (). AddCookies ("Identity.External", ...)?
Если я не укажу options.DefaultScheme = "Identity.Application";
, пользователь не вошел в систему.
Если я не добавлю .AddCookie("Identity.External")
и .AddCookie("Identity.TwoFactorUserId")
, процесс выхода из системы выдает то же исключение, что и выше.
Для процесса входа в систему это просто исправляется удалением строки await HttpContext.SignOutAsync(IdentityConstants.ExternalScheme);
.Если я не использую внешние схемы, мне не нужно выходить из них, верно?
Это приводит меня к моей проблеме: как я могу отключить внешние входы в систему и многофакторную аутентификацию в Identity Core, чтобы я не делал этого?нужно добавить эти куки в первую очередь?Кроме того, почему я должен указать cookie с именем «Identity.Application», чего нет в конфигурации по умолчанию?Я почти уверен, что это просто еще одна проблема, связанная с тем, что я не совсем разбираюсь в этой проблеме, поэтому я благодарен за любые разъяснения по этому вопросу.
Это моя конфигурация Identity из Startup.cs, которую я также создалполный пользовательский интерфейс Identity с пользовательским классом IdentityUser.
var jwtAppSettingOptions = Configuration.GetSection(nameof(JwtIssuerOptions));
services.Configure<JwtIssuerOptions>(options =>
{
options.Issuer = jwtAppSettingOptions[nameof(JwtIssuerOptions.Issuer)];
options.Audience = jwtAppSettingOptions[nameof(JwtIssuerOptions.Audience)];
options.SigningCredentials = new SigningCredentials(_signingKey, SecurityAlgorithms.HmacSha256);
});
var tokenValidationParameters = new TokenValidationParameters
{
/*...*/
};
services.AddAuthentication(options =>
{
options.DefaultScheme = "Identity.Application";
})
//.AddCookie("Identity.External")
//.AddCookie("Identity.TwoFactorUserId")
.AddCookie("Identity.Application", opt =>
{
opt.SlidingExpiration = true;
})
.AddJwtBearer(options =>
{
options.ClaimsIssuer = jwtAppSettingOptions[nameof(JwtIssuerOptions.Issuer)];
options.TokenValidationParameters = tokenValidationParameters;
options.SaveToken = true;
});
var builder = services.AddIdentityCore<AppUser>(o =>
{
//removed
});
builder = new IdentityBuilder(builder.UserType, typeof(IdentityRole), builder.Services);
builder.AddEntityFrameworkStores<ApplicationDbContext>().AddDefaultTokenProviders();