标签:
Authentication(认证)
WebAPI中的认证既可以使用HttpModel也可以使用HTTP message handler,具体使用哪个可以参考一下依据:
通常。如果不需要运行在self-hosting环境中的话,HTTP model是一个很好的选择,反之,可以考虑message handler。
设置Principal
如果application需要执行自定义的authentication逻辑,需要在两个地方设置principal
private void SetPrincipal(IPrincipal principal) { Thread.CurrentPrincipal = principal; if (HttpContext.Current != null) { HttpContext.Current.User = principal; } }
Authorization(授权)
授权在靠近controller时被执行,目的是为了可以有更多机会进行细粒度控制对资源的访问。
Authorize可以应用到Globally、controller、action级别。优先级:action>controller>globally
[Authorize] public class ValuesController : ApiController { [AllowAnonymous]//允许匿名访问 public HttpResponseMessage Get() { ... } //授权用户才能访问 public HttpResponseMessage Post() { ... } }
还可以控制action的访问所需的权限
[Authorize(Users="Alice,Bob")] public class ValuesController : ApiController { } // Restrict by role: [Authorize(Roles="Administrators")] public class ValuesController : ApiController { }
自定义Authorization Filters
自定义authorization过滤器,可以通过继续AuthorizeAttribute或AuthorizationFilterAttribute或IAuthorizationFilter来实现,如果是cpu密集型的身份验证逻辑应使用同步的方式,如果是IO密集型的应使用异步方法。
AuthorizeAttribute的层级关系:
WebApi2官网学习记录--- Authentication与Authorization
标签:
原文地址:http://www.cnblogs.com/goodlucklzq/p/4460842.html