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