MSDN довольно четко описывает маршрутизацию и безопасность MVC:
Единственный поддерживаемый способ защиты приложения MVC - это применить атрибут AuthorizeAttribute к каждому контроллеру и использовать атрибут AllowAnonymousAttribute для действий входа и регистрации.
Однако я рассматриваю следующий подход:
Во-первых, я реализовал настраиваемую фабрику контроллеров, которая выполняет проверки безопасности на основе информации, поступающей от нашей настраиваемой службы STS.
Помимо другой информации, маркер, выпущенный STS, содержит утверждения, описывающие все маршруты MVC, к которым пользователю разрешен доступ.
Затем я проверяю утверждения пользователей в методе CreateController:
public class SecuredControllerFactory : IControllerFactory
{
public IController CreateController(System.Web.Routing.RequestContext requestContext, string controllerName)
{
...
bool isAuthorized = principal.HasRequiredRight(verb, ressource);
...
}
}
Таким образом, мы можем централизованно настраивать и обновлять правила безопасности без повторного развертывания наших приложений. Более того, это соответствует идее «соглашение важнее конфигурации».
Что-то не так с этим подходом? Я не понимаю, почему это считается плохой практикой? Может ли кто-нибудь продемонстрировать конкретную проблему безопасности с этим?