AllowAnonymous vs OverrideAuthorizeAttribute
本文关键字:OverrideAuthorizeAttribute vs AllowAnonymous | 更新日期: 2023-09-27 18:25:24
使用AllowAnonymous和OverrideAuthorizeAttribute有什么区别。是一样的吗?
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() { ... }
}
在上面的示例中,授权用户(任何已识别的用户)都可以访问post-action方法,但Get操作方法不需要授权。
授权将对资源的访问权限限制为属于已被授予访问权限的用户或用户角色的用户。[OverrideAuthorization]
属性禁用[Authorization]
步骤,使得任何经过身份验证的用户都可以访问该动作方法。这可以从文章中的以下示例中看到。
考虑以下控制器类别:
[Authorize(Roles="Admins")]
public class SomeController : ApiController {
[OverrideAuthorization]
[Authorize(Roles="Users")]
public IEnumerable<SomeModel> Get() {...}
public SomeModel Post() {...}
}
在上面的示例中,用户必须经过身份验证,并且具有访问控制器定义的任何操作方法的原则。但是,虽然只有角色为"Admins"的原则才能访问Post操作方法,但任何具有Users角色的已验证用户都可以访问Get操作方法。
OverrideAuthorizeAttribute
描述了一个属性,该属性根据任何开发人员的实现来覆盖AuthorizeAttribute
的当前功能(任何版本的.NET Framework中都没有提供)。
AllowAnonymousAttribute
由.NET提供,以.NET团队定义的方式覆盖AuthorizeAttribute
功能。(它在.NET Framework中提供)。