Я бы предложил вам иметь отдельные области для API и веб-страниц.У вас могут быть контроллеры с одинаковыми именами в разных областях.Без сомнения, это повторение логики, но вы можете спроектировать так, чтобы фактическая реализация была в общих методах, вызываемых из двух действий.
services.AddAuthentication(options => {
options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
}).AddCookie(options =>
{
options.AccessDeniedPath = new PathString("/Console/Account/Index/");
options.LoginPath = new PathString("/Console/Account/Index/");
})
.AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, jwtBearerOptions => {
jwtBearerOptions.TokenValidationParameters = new TokenValidationParameters {
ValidateAudience = false,
ValidateIssuer = false,
ValidateIssuerSigningKey = true,
IssuerSigningKey = JWT_Sec_Key,
ValidateLifetime = true, //validate the expiration and not before values in the token
ClockSkew = TimeSpan.FromMinutes(5) //5 minute tolerance for the expiration date
};
});
Здесь по умолчанию auth - Cookie, поэтому включите только [Authorize]Контроллеры веб-страниц.
Используйте [Authorize (AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)] для контроллеров API.
EDIT:
Я где-то читалчто вы даже можете предоставить обе схемы, например
[Authorize (AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme + "," + CookieAuthenticationDefaults.AuthenticationScheme)]
Пожалуйста, попробуйте и дайте мне знать ...
EDIT2: Возможно использование нескольких аннотаций.Ссылка: https://github.com/auth0-samples/aspnet-core-mvc-plus-webapi
[Authorize (AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)] [Authorize (AuthenticationSchemes = CookieAuthenticationDefaults.AuthenticationScheme)]