Определите метод WebAPI, который менее ограничен, чем его класс для авторизации - PullRequest
0 голосов
/ 16 апреля 2019

Я хочу определить ApiController с атрибутом [Authorize(Role="something")], чтобы по умолчанию для любых методов, добавляемых в контроллер, требовалась роль «что-то», но я хочу создать пару методов для Контроллер менее строгий, чем этот, но не анонимный. Я пробовал следующее (отдельно, не все сразу):

[Authorize(Role="*")]
[Authorize(Role="Any")]
[Authorize(Role="")]
[Authorize]
[Authorize(Users="*", Roles="")]

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

Ответы [ 2 ]

1 голос
/ 17 апреля 2019

Насколько я знаю, это невозможно; Я столкнулся с той же проблемой и согласен, что это паршиво для безопасности. К сожалению, в ASP.Net существует множество шаблонов, которые фактически затрудняют соблюдение правил безопасности - все, что можно сделать, это быть бдительными.

Возможно, вы могли бы подумать о том, чтобы переместить ваш менее безопасный метод в совершенно другой контроллер API только для того, чтобы всегда разрешать декларации безопасности для всего класса с наибольшим ограничением.

0 голосов
/ 17 апреля 2019

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

В таких случаях нормально иметь несколько контроллеров, каждый из которых контролируется все меньшим и меньшим ограничительным поведением, снижаясь даже до уровня анонимного доступа. Примером анонимного метода может быть Register метод или Request Access метод.

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

Вы по-прежнему можете придерживаться каких-то шаблонов проектирования, предполагая, что ваш API, например, RESTful, вы все равно можете придерживаться этого, просто есть некоторые исключения в соответствии с тем, что я здесь показываю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...