Предположим, что мы используем аутентификацию со схемой «Abc» и соответствующим обработчиком, и все отлично. Мы можем защитить контроллер просто с помощью
[Authorize(AuthenticationSchemes = "Abc", Roles = "admin")]
атрибут
Но теперь появилась необходимость иметь возможность защищать конечные точки контроллера и с помощью схемы "Xyz" (поэтому запрос должен соответствовать требованиям обех схем). Итак, я подумал, что регистрации новой схемы и обработчика достаточно, чтобы иметь возможность использовать [Authorize]
следующим образом и получать логику AND
:
[Authorize(AuthenticationSchemes = "Abc", Roles = "admin")]
[Authorize(AuthenticationSchemes = "Xyz")]
public class UserController : ControllerBase
{
}
Но вместо этого действительный запрос к контроллеру приводит к статусу ответа "Запрещено" (обратите внимание, что даже не в "Неавторизовано").
Также мне интересно, что когда мы применяем [Authorize(AuthenticationSchemes = "Xyz")]
к методу действия вместо контроллера - все работает как надо.
P.S: MvcOptions.AllowCombiningAuthorizeFilters
в Startup
уже установлено на false
.
Я предполагаю, что он все еще каким-то образом объединяет логику авторизации, когда оба атрибута присутствуют на одном уровне (в данном случае контроллера).
Кто-нибудь знает, что мне не хватает? Возможно, я вообще думаю в неправильном направлении, и есть подходящий способ сделать аутентификацию с несколькими схемами. Так что, пожалуйста, не стесняйтесь предлагать свои идеи.