• WebAPI认证和授权


    身份验证(Authentication):确定用户是谁。
    
    授权(Authorization):确定用户能做什么,不能做什么。

    授权发生在管道中更接近 controller 的位置。

    
    
    • 授权筛选器(Authorization filter)在 action 之前运行。若请求未授权,返回错误,action 不运行。
    • 在 action 内部,可以用 ApiController.User 属性获取主体对象,做进一步的控制。
    
    

     

    一 身份认证

    WebApi 假定身份验证发生在宿主程序称中。对于 web-hosting,宿主是 IIS。这种情况下使用 HTTP Module 进行验证。
    
    验证时,宿主会创建一个表示安全上下文的主体对象(实现 IPrincipal),将它附加到当前线程。主体对象包含一个存储用户信息的 Identity 对象。若验证成功,Identity.IsAuthenticated 属性将返回 true

    身份认证有两种方式
    (1)
    HTTP 消息处理程序(HTTP Message Handler) (2)过滤器 AuthorizeAttribute
    [Authorize] 属性
    AuthorizeAttribute 是内置的授权筛选器。用户未通过身份验证时,它返回 HTTP 401 状态码。可以在全局,控制和 action 三个级别应用它。
    
    在全局级别应用:
    
    public static void Register(HttpConfiguration config)
    {
        config.Filters.Add(new AuthorizeAttribute());
    }
    在控制器级别应用:
    
    [Authorize]
    public class ValuesController : ApiController
    {
        public HttpResponseMessage Get(int id) { ... }
        public HttpResponseMessage Post() { ... }
    }
    在 Action 级别应用: 复制代码
    public class ValuesController : ApiController { public HttpResponseMessage Get() { ... } [Authorize] public HttpResponseMessage Post() { ... } } 在控制器上应用 [Authorize] 时,可以在 Action 上应用 [AllowAnonymous] 取消对某个 Action 的授权要求。上面的代码可以改成下面的形式: [Authorize] public class ValuesController : ApiController { [AllowAnonymous] public HttpResponseMessage Get() { ... } public HttpResponseMessage Post() { ... } } 指定用户和角色进行限制: // 按用户限制访问 [Authorize(Users="Alice,Bob")] public class ValuesController : ApiController { } // 按角色限制访问 [Authorize(Roles="Administrators")] public class ValuesController : ApiController { } 用于 WebAPI 的 AuthorizeAttribute 位于 System.Web.Http 命名空间。在 System.Web.Mvc 命名空间中有一个同名属性,不可用于 WebAPI。
    自定义授权筛选器
    可从以下类型派生自定义授权筛选器
    
    AuthorizeAttribute,基于用户和角色进行授权。
    AuthorizationFilterAttribute,不基于用户和角色的同步授权。
    IAuthorizationFilter,实现此接口执行异步授权逻辑。例如,授权逻辑中有对 IO 或网络的异步调用。(CPU-bound的授权逻辑更适合从 AuthorizationFilterAttribute 派生,这样不必写异步方法)。
    下图是 AuthorizeAttribute 类层次
    
    
    
    在 Action 中执行验证
    可在控制器中检查 ApiController.User 属性,根据用户和角色使用不同的逻辑。
    
    public HttpResponseMessage Get()
    {
        if (User.IsInRole("Administrators"))
        {
            // ...
        }
    }
  • 相关阅读:
    课堂讨论电子版
    项目目标文档
    系统利益相关者
    实训八(游戏背景)
    实训七(项目准备与创建)
    实训六(Cocos2dx游戏分享到微信朋友圈----AppID的获取)
    实训五(Cocos2dx-3.x 打包apk再理解)
    实训四(cocos2dx sharesdk集成-1)
    实训三(cocos2dx 3.x 打包apk)
    实训二(cocos2dx 2.x 打包apk)
  • 原文地址:https://www.cnblogs.com/LGDD/p/9427075.html
Copyright © 2020-2023  润新知