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);
...
}
}
通过这种方式,我们可以集中配置和更新安全规则,而无需重新部署我们的应用程序。此外,它符合“约定优于配置”的思想。
这种方法有问题吗?我不明白为什么它被认为是一种不好的做法?有人可以对此表现出具体的安全问题吗?