Всегда есть способ:)
Допустим, у вас есть область - Area55 - с контроллером API - AlienController -
Создайте свое собственное соглашение о модели контроллера, чтобы любой контроллер в Area55будет авторизован apipolicy
public class MyAuthorizeFiltersControllerConvention : IControllerModelConvention
{
public void Apply(ControllerModel controller)
{
string apiArea;
if (controller.RouteValues.Any()
&& controller.RouteValues.TryGetValue("area", out apiArea)
&& apiArea.Equals("Area55"))
{
controller.Filters.Add(new AuthorizeFilter("apipolicy"));
}
else
{
controller.Filters.Add(new AuthorizeFilter("defaultpolicy"));
}
}
}
Затем зарегистрируйте его в файле startup.cs
services.AddMvc(o =>
{
o.Conventions.Add(new MyAuthorizeFiltersControllerConvention());
});
, который все еще находится в вашем файле startup.cs, настройте политики для использования аутентификациисхема, которую мы хотим
services.AddAuthorization(o =>
{
o.AddPolicy("defaultpolicy", b =>
{
b.RequireAuthenticatedUser();
b.AuthenticationSchemes = new List<string> { IISDefaults.AuthenticationScheme };
});
o.AddPolicy("apipolicy", b =>
{
b.RequireAuthenticatedUser();
b.AuthenticationSchemes = new List<string> { JwtBearerDefaults.AuthenticationScheme };
});
});
Контроллер может быть примерно таким
[Area("Area55")]
[Route("[area]/api/[controller]")]
[ApiController]
public class AlienController : ControllerBase
{
}
Это все, что я думаю.