使用AllowAnonymous和OverrideAuthorizeAttribute有什么区别。
一样吗
最佳答案
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() { ... }
}
在上面的示例中,授权用户(任何已标识的用户)可以访问后操作方法,但“获取”操作方法不需要任何授权。
授权将对资源的访问限制为属于那些已被授予访问权限的用户或用户角色的用户。 [OverrideAuthorization]属性禁用[Authorization]步骤,以便任何经过身份验证的用户都可以访问该操作方法。从本文的以下示例中可以看出这一点。
考虑以下控制器类:
[Authorize(Roles="Admins")]
public class SomeController : ApiController {
[OverrideAuthorization]
[Authorize(Roles="Users")]
public IEnumerable<SomeModel> Get() {...}
public SomeModel Post() {...}
}
在上面的示例中,必须对用户进行身份验证,并且必须具有用户身份才能访问控制器定义的任何操作方法。但是,虽然只有具有“管理员”角色的原则可以访问“发布”操作方法,但“用户”角色中的任何经过身份验证的用户都可以访问“获取”操作方法。