zoukankan      html  css  js  c++  java
  • WebApi2官网学习记录--- Authentication与Authorization

    Authentication(认证)

      WebAPI中的认证既可以使用HttpModel也可以使用HTTP message handler,具体使用哪个可以参考一下依据:

    1. 一个HttpModel可以检测ASP.NET请求管道中的所有请求,一个message handler仅仅可以检测到被路由到这个WebAPI的请求
    2. 可以预先设置message handlers,让特定的route使用指定的authentication scheme
    3. Http Module只能在IIS中使用,Message hans可以在任意ost-agnostic环境中使用(web-hosting和self-hosting)
    4. HTTP Module在IIS中参与登陆、审计等过程
    5. HTTP Module在管道事件初期就执行了,如果使用的是message handler,principal直到handler执行时才被赋值

      通常。如果不需要运行在self-hosting环境中的话,HTTP model是一个很好的选择,反之,可以考虑message handler。

    设置Principal

      如果application需要执行自定义的authentication逻辑,需要在两个地方设置principal

    • Thread.CurrentPrincipal     用于.NET
    • HttpContext.Current.User  用于ASP.NET
    private void SetPrincipal(IPrincipal principal)
    {
        Thread.CurrentPrincipal = principal;
        if (HttpContext.Current != null)
        {
            HttpContext.Current.User = principal;
        }
    }

    Authorization(授权)

      授权在靠近controller时被执行,目的是为了可以有更多机会进行细粒度控制对资源的访问。

    • Authorization filters在controller action之前执行,如果没有授权action不会被调用
    • 在controller action的内部,可以从ApiController.User中获得当前的principal 

     使用[Authorize] 特性

      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过滤器,可以通过继续AuthorizeAttributeAuthorizationFilterAttributeIAuthorizationFilter来实现,如果是cpu密集型的身份验证逻辑应使用同步的方式,如果是IO密集型的应使用异步方法。

     AuthorizeAttribute的层级关系:

       

  • 相关阅读:
    豆豆
    艺术家
    姐姐
    书名与歌名
    MySQL
    杂文
    武侠
    青年诗人
    那些歌
    传世
  • 原文地址:https://www.cnblogs.com/goodlucklzq/p/4460842.html
Copyright © 2011-2022 走看看