Как отключить внешние логины в Identity Core? - PullRequest
0 голосов
/ 15 октября 2018

Я нахожусь в процессе интеграции простого процесса аутентификации в приложение 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();
...