AllowAnonymous 与 OverrideAuthorizeAttribute

Sha*_*tar 4 c# authorization asp.net-web-api2

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

Bil*_*ill 5

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() { ... }
 }
Run Code Online (Sandbox Code Playgroud)

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

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

考虑以下控制器类:

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

在上面的例子中,用户必须经过身份验证并且有一个原则来访问控制器定义的任何操作方法。但是,虽然只有具有“管理员”角色的原则才能访问 Post 操作方法,但任何具有 Users 角色的经过身份验证的用户都可以访问 Get 操作方法。


小智 1

OverrideAuthorizeAttributeAuthorizeAttribute描述了一个属性,该属性根据任何开发人员的实现覆盖当前功能( .NET Framework 的任何版本中均未提供该属性)。

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