授权在ASP.NET MVC属性授权在ASP.NET MVC属性(Authorize attribu

2019-05-16 21:01发布

我有一个很难理解真正使用的[Authorize]在ASP.NET MVC属性。 按照概念已经,如果我们装饰与控制器方法[Authorize]属性,只有认证用户被允许访问的控制器。

我已经开发了一个ASP.NET MVC应用程序,而装饰用控制器[Authorize]属性。 我所观察到的是,如果我正确地在我的应用程序中使用的web.config或其他方式实现身份验证机制,noway我可以访问网址{controller}/{action}/{id}特定的操作方法。

系统总是要求登录。 这意味着我的控制器固定。 我的问题是,当我可以保证我的控制器不使用[Authorize]属性,那么什么是它的真正需求?

Answer 1:

真正的力量来自理解和实行会员提供连同角色提供。 您可以将用户分配到的角色,并根据该限制,你可以将不同的访问角色为不同的用户控制器动作或控制器本身。

 [Authorize(Users = "Betty, Johnny")]
 public ActionResult SpecificUserOnly()
 {
     return View();
 }

或者也可以根据组限制

[Authorize(Roles = "Admin, Super User")]
public ActionResult AdministratorsOnly()
{
    return View();
}


Answer 2:

使用[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



Answer 3:

它的存在,因为它使用起来更方便,也很使用的属性标记的授权参数,而不是xml配置一个完全不同的意识形态。 这是不是意味着要击败通用配置或其他任何授权的框架,只是MVC的做这件事的方式。 我说这个,因为它似乎你正在寻找一个技术特色优势这或许是不...太精彩了便利。

BobRock已经列出的优点。 只需添加到他的答案,另一种情况是,你可以将此属性应用到整个控制器,不只是动作,你也可以到不同的动作在同一控制器混搭添加不同的角色授权参数。



Answer 4:

使用Authorize属性似乎更方便,感觉更“MVC方式”。 至于技术上的优势也有一些。

当你在你的应用程序中使用输出缓存。这使我想到的一个方案是。 授权属性处理那么好。

另一个办法是可扩展性。 该Authorize属性只是基本开箱过滤器的,但是你可以重写它的方法,并做一些预授权如登录等。我不知道你会怎么做,通过配置操作。



Answer 5:

一个优点是,你正在编译访问到应用程序,所以它不会意外被人修改Web.config进行改变。

这可能不是一个优势,你,可能是一个缺点。 但对于某些类型的访问权限,它可能是preferrable。

另外,我发现在Web.config的授权信息污染它,使它很难找到的东西。 因此,在某些方面它的优先级,在别人没有其他办法做到这一点。



Answer 6:

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]属性。



文章来源: Authorize attribute in ASP.NET MVC