2015-12-02 55 views

回答

1

OverrideAuthorizeAttribute描述了一种属性,根据任何开发人员的实现(不在任何.NET框架版本中提供)覆盖AuthorizeAttribute的当前功能。

AllowAnonymousAttribute由.NET提供,以.NET团队定义的方式覆盖AuthorizeAttribute功能。 (它在.NET框架中提供)。

1

http://www.asp.net/web-api/overview/security/authentication-and-authorization-in-aspnet-web-api

两者是不同的,但可以在某些情况下相同的效果。 认证是验证用户的过程。覆盖将在下一个最高级别的作用域中禁用覆盖类型的筛选器。授权是确定用户是否应该访问特定资源的过程。 [AllowAnonymous]属性禁用身份验证,以便Web API将在对使用此属性修饰的控制器的访问请求期间跳过身份验证和授权,或跳转到使用此属性修饰的特定操作方法。从链接

[Authorize] 
public class ValuesController : ApiController 
{ 
    [AllowAnonymous] 
    public HttpResponseMessage Get() { ... } 
    public HttpResponseMessage Post() { ... } 
} 

在上面的示例授权用户(任何识别的用户)中列出的物品考虑以下控制器类具有访问该信息的动作的方法,但需要用于获取动作方法没有授权。

授权将对资源的访问限制为属于那些用户或已授予访问权限的用户角色的用户。 [OverrideAuthorization]属性禁用[Authorization]步骤,以便任何经过身份验证的用户都可以访问操作方法。这可以从下面的文章中看到。

考虑下面的控制器类:

[Authorize(Roles="Admins")] 
public class SomeController : ApiController { 
    [OverrideAuthorization] 
    [Authorize(Roles="Users")] 
    public IEnumerable<SomeModel> Get() {...} 
    public SomeModel Post() {...} 
    } 

在上述例子中,用户必须被认证和具有prinicple访问任何由控制器定义的动作的方法。但是,只有具有“管理员”角色的原则才能访问Post操作方法,而用户角色中的任何经过身份验证的用户都可以访问Get操作方法。