AllowAnonymous vs OverrideAuthorizeAttribute

时间:2015-12-02 13:27:16

标签: c# authorization asp.net-web-api2

使用AllowAnonymous和OverrideAuthorizeAttribute有什么区别。 它是一样的吗?

2 个答案:

答案 0 :(得分:2)

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

两者不同,但在某些情况下可以产生相同的效果。 身份验证是验证用户的过程。覆盖在下一个最高级别的范围内禁用覆盖类型的过滤器。授权是确定用户是否应该访问特定资源的过程。 [AllowAnonymous]属性禁用身份验证,以便web api在对使用此属性修饰的控制器或使用此属性修饰的特定操作方法的访问请求期间跳过身份验证和授权。请考虑链接

中列出的文章中的以下Controller类
 [Authorize]
 public class ValuesController : ApiController
 {
     [AllowAnonymous]
     public HttpResponseMessage Get() { ... }
     public HttpResponseMessage Post() { ... }
 }

在上面的示例中,授权用户(任何已识别的用户)可以访问post操作方法,但Get操作方法不需要授权。

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

考虑以下控制器类:

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

在上面的示例中,用户必须经过身份验证并具有访问控制器定义的任何操作方法的原则。然而,虽然只有具有&#34; Admins&#34;可以访问Post操作方法,Users角色中的任何经过身份验证的用户都可以访问Get操作方法。

答案 1 :(得分:1)

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

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