基于ASP.NET MVC3的授权

我将ASP.NET MVC添加到现有的WebForms应用程序中。 目前,我不关心认证/登录,因为这部分是由现有代码(Forms认证)处理的。

在现有的WebForms应用程序中,我们有一个完全自定义的基于权限的授权页面。 因此,每个用户都有一组权限,列出他可以访问的页面。
现在我需要决定如何使用相同的权限系统来限制对特定MVC控制器和操作的访问。

据我所知,对于ASP.NET MVC有一个标准的AuthorizeAttribute,我可以指定角色。 我还发现了一些建议指定权限而不是角色的文章 - 那么可以这样做:

[CustomAuthorize(Roles = "View products, Edit products")]

通过扩展AuthorizeAttribute,我还可以定义我如何存储和访问权限。

这个解决方案对我来说是可以接受的(尽管改变角色的语义有点嗅觉)。
但在承诺之前,我想看看还有其他的选择。 这就是我陷入困境的地方 - 我还没有找到关于ASP.NET MVC授权的不同方法的完整概述。 我也想知道所有的安全概念(如表单身份验证,成员资格提供者,授权属性,IPrincipal等)是如何相互关联的,以及它们应该如何协同工作。


首先你必须明白的是,就像Webforms一样,MVC中有一个管道。 每个请求都经过多种方法,并且沿途有扩展点,可以“挂钩”并执行操作。

所有AuthorizeAttribute都会挂钩到OnAuthorization扩展点,并根据您提供给它的标准(用户名,角色等)决定是否允许某人访问。

以下是一个示例:http://geekswithblogs.net/brians/archive/2010/07/08/implementing-a-custom-asp.net-mvc-authorization-filter.aspx

您可以创建自己的自定义授权属性,并使用自己的标准完成相同的事情。 你不需要重新定义角色参数,如果你愿意,你可以创建你自己的全部。

这是MVC更喜欢的方法。 另外一件好事是,如果您还将其设为过滤器,那么您可以将其添加到全局过滤器,并将其应用于所有内容(如果需要的话)。

你基本上有两个合理的选择。 在Application_AuthenticateRequest(不推荐)中的global.asax中实现一个处理程序,或者创建一个覆盖OnAuthorize(该属性挂钩同一事物,但位于不同位置)的公共BaseController。

许多人尝试使用会话变量进行身份验证,这是最糟糕的事情。

由于我们对认证和许可系统一无所知,我们所能做的就是提供一般性建议。

链接地址: http://www.djcxy.com/p/15969.html

上一篇: based authorization in ASP.NET MVC3

下一篇: based authorization in ASP.NET?