У меня есть приложение .net core 2.2, которое предоставляет API-интерфейс Rest, доступ к которому должен осуществляться с использованием токена на предъявителя.
Я могу проверить токен
Startup.cs/ConfigureServices
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
RequireExpirationTime = true,
RequireSignedTokens = true,
ValidateAudience = false,
ValidateIssuer = false,
ValidateLifetime = false,
IssuerSigningKeys = openIdConfig.SigningKeys
////Ensure the token audience matches our audience value(default true):
//ValidateAudience = false, //true,
// //ValidAudience = "api://default",
};
});
И я понял, что, установив ValidateAudience = true, я смог установить ValidAudience.
Действия контроллеров оформлены следующим образом
[HttpPost("/v1.0/call/msisdns/{msisdn}")]
[Authorize]
public async Task<IActionResult> Post(string msisdn, [FromBody] CallRoot callRoot)
Маркер может содержать разные области действия, и каждому контроллеру требуется определенная область.
Я могу проверить, содержит ли токен хотя бы одну допустимую область, но я не знаю, как проверить, содержит ли она область действия для конкретного контроллера (или действия), который будет обрабатывать запрос.
Я предположил, что некоторая перегрузка атрибута Authorize может помочь, я понял, что, возможно, я могу сопоставить аудиторию / область с ролью и заставить контроллер разрешить эту роль, но я не знаю, может ли это работать и как это сделать выполнить это отображение.