我有一个很难理解真正使用的[Authorize]
在ASP.NET MVC属性。 按照概念已经,如果我们装饰与控制器方法[Authorize]
属性,只有认证用户被允许访问的控制器。
我已经开发了一个ASP.NET MVC应用程序,而装饰用控制器[Authorize]
属性。 我所观察到的是,如果我正确地在我的应用程序中使用的web.config或其他方式实现身份验证机制,noway我可以访问网址{controller}/{action}/{id}
特定的操作方法。
系统总是要求登录。 这意味着我的控制器固定。 我的问题是,当我可以保证我的控制器不使用[Authorize]
属性,那么什么是它的真正需求?
真正的力量来自理解和实行会员提供连同角色提供。 您可以将用户分配到的角色,并根据该限制,你可以将不同的访问角色为不同的用户控制器动作或控制器本身。
[Authorize(Users = "Betty, Johnny")]
public ActionResult SpecificUserOnly()
{
return View();
}
或者也可以根据组限制
[Authorize(Roles = "Admin, Super User")]
public ActionResult AdministratorsOnly()
{
return View();
}
使用[Authorize]
属性可以帮助防止安全漏洞的应用程序。 即MVC处理的URL(即它们路由到一个控制器,而不是实际的文件)的方式,难以保证实际通过web.config文件的一切。
在这里阅读更多: http://blogs.msdn.com/b/rickandy/archive/2012/03/23/securing-your-asp-net-mvc-4-app-and-the-new-allowanonymous-attribute。 ASPX
它的存在,因为它使用起来更方便,也很使用的属性标记的授权参数,而不是xml配置一个完全不同的意识形态。 这是不是意味着要击败通用配置或其他任何授权的框架,只是MVC的做这件事的方式。 我说这个,因为它似乎你正在寻找一个技术特色优势这或许是不...太精彩了便利。
BobRock已经列出的优点。 只需添加到他的答案,另一种情况是,你可以将此属性应用到整个控制器,不只是动作,你也可以到不同的动作在同一控制器混搭添加不同的角色授权参数。
使用Authorize
属性似乎更方便,感觉更“MVC方式”。 至于技术上的优势也有一些。
当你在你的应用程序中使用输出缓存。这使我想到的一个方案是。 授权属性处理那么好。
另一个办法是可扩展性。 该Authorize
属性只是基本开箱过滤器的,但是你可以重写它的方法,并做一些预授权如登录等。我不知道你会怎么做,通过配置操作。
一个优点是,你正在编译访问到应用程序,所以它不会意外被人修改Web.config进行改变。
这可能不是一个优势,你,可能是一个缺点。 但对于某些类型的访问权限,它可能是preferrable。
另外,我发现在Web.config的授权信息污染它,使它很难找到的东西。 因此,在某些方面它的优先级,在别人没有其他办法做到这一点。
web.config中的标签是基于路径,而MVC可与控制器动作和路线。
它是一个建筑的决定,如果你只是想阻止都没有登录的用户可能不会做出很大的差异,但让很多差别的,当你尝试应用在基于角色和的情况下,你想要的自定义处理授权类型的未经授权的。
第一种情况是从BobRock的答案覆盖。
用户应具有以下作用中的至少一种访问控制器或操作
[Authorize(Roles = "Admin, Super User")]
用户应该有这两个角色,以便能够访问控制器或者动作
[Authorize(Roles = "Super User")]
[Authorize(Roles = "Admin")]
可以访问控制器或操作的用户是贝蒂和约翰尼
[Authorize(Users = "Betty, Johnny")]
在ASP.NET核心,你可以使用声明和政策原则通过授权[Authorize]
。
options.AddPolicy("ElevatedRights", policy =>
policy.RequireRole("Administrator", "PowerUser", "BackupAdministrator"));
[Authorize(Policy = "ElevatedRights")]
第二来自在授权可能需要与不同的限制,加工和处理依据的情况下实现更大的应用非常方便。 出于这个原因,我们可以扩展的AuthorizeAttribute并实施我们的项目不同的授权方案。
public class CustomAuthorizeAttribute: AuthorizeAttribute
{
public override voidOnAuthorization(AuthorizationContextfilterContext)
{ }
}
“ 正确完成的 ”办法做到授权,ASP.NET MVC使用[Authorize]
属性。