Как проверить области для каждого контроллера в .Токен-носитель Net core mvc Oauth2

#asp.net-core #oauth-2.0 #authorization #bearer-token

#asp.net-core #oauth-2.0 #авторизация #токен предъявителя

Вопрос:

У меня есть приложение .net Core 2.2, которое предоставляет некоторый Rest API, к которому необходимо получить доступ с помощью токена на предъявителя.

Я могу проверить токен

 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, я мог бы установить Validateaudience.

Действия контроллеров оформлены следующим образом

 [HttpPost("/v1.0/call/msisdns/{msisdn}")]
[Authorize]
public async Task<IActionResult> Post(string msisdn, [FromBody] CallRoot callRoot)
  

Токен может содержать разные области, и для каждого контроллера требуется определенная область.

Я могу проверить, содержит ли токен хотя бы одну допустимую область, но я не знаю, как проверить, содержит ли он область, допустимую для конкретного контроллера (или действия), который будет обрабатывать запрос.

Я предположил, что может помочь некоторая перегрузка атрибута Authorize, я выяснил, что, возможно, я могу сопоставить аудиторию / область действия с ролью и попросить контроллер авторизовать эту роль, но я не знаю, может ли это сработать и как выполнить это сопоставление.

Комментарии:

1. разрешенная область будет сохранена в виде утверждений в вашем JWT, извлеките это и создайте политику, которая требует утверждения с определенным значением.

2. AuthorizeAttribute теперь это просто заполнитель. Вы не наследуете от него, как могли бы иметь в ASP.NET В большинстве сценариев используется MVC. Для пользовательской авторизации используются политики. learn.microsoft.com/en-us/aspnet/core/security/authorization /…