认证与授权

认证与授权,Authentication and Authorize,这个是两个不同的事。认证是对访问身份进行确认,如验证用户名和密码,而授权是在认证之后,判断是否具有权限进行某操作,如 Authorize 属性。简单说,他们之间先后顺序是先认证,再授权。

Web Api 的客户端可以是浏览器,GUI 应用程序,各移动设备应用等等,设计的 Api 可以供自己使用,也可以供别人使用。因为很多人习惯了 IIS ,当 Web Api 寄宿在 IIS 上时,他们习惯了 Cookie 的方式,但 Owin Self Host 的出现,以及不同端的出现,Cookie 一下就成了麻烦的事了,不能解决问题了。

那该怎么办呢?观看现在各平台提供 Api,第三方应用使用数据前,都是先进行认证,然后返回 token 信息,然后每次的请求都将 token 信息一起发送过去,就是 Api 的请求都是每次需要进行验证的,在没有 Cookie 的情况下,token 信息怎么发送呢?

  1. 与 Query String 一起
  2. 放到 Request Header Authorization 里面

使用 postman 进行测试 Api 的时候,就能感受到了。这里主要讲第 2 种方式,使用 IIS 的情况就不讲了,因为可以使用 HttpConext(System.Web.dll),那么使用 Owin Self Host 方式,该怎么去实现认证呢?

Web Api 认证实现

这里不考虑数据传输安全的问题。认证前先要做好准备工作,提供一个 Api 认证接口,如 Login,认证成功后返回 token(用户信息及超时时间等信息),后续的 Api 调用就要通过 token 进行认证与授权了。这里有 3 种实现方式:

MessageHandler 参考

这是 Web Api 有的方式,通过继承 DelegatingHandler ,获取 token 信息,然后进行认证,只需将实现的 MessageHandler 假如配置即可:

 config.MessageHandlers.Add(new BasicAuthenticationHandler());

Attribute Filter 参考

通过实现自定义的 Authorize 属性,获取 token,然后进行认证

Owin Middleware 参考

当 Web Api 寄宿在 Owin Self Host 上时,可以通过实现自己的 Middleware 来认证,而且相比 Message Handler 的好处是,Message Handler 只对 Web Api 有效,而 Middleware 可以对其他寄宿在 Owin 上的 Application 都有效,如 SignalR 等

当然正确的做法应该是继承 Microsoft.Owin.Security.AuthenticationMiddleware 来实现,可以参考 Katana Project 其他的认证实现

总结

看了很多资料才了解到这些实现方式,其实都是因为自己知识储备不够,首先连认证和授权都搞混了,然后是之前 Asp.Net 模式的羁绊,阻碍了接受新鲜事物。面对新东西,还是先要搞清概念与原理,然后分析处理的逻辑,就能定位到解决问题要关注的点,所以啊,还是要多学习,深入学习。

HttpClient 进行 Basic 认证时,发送用户信息的实现,参考

关于 Web Api 2 认证与授权的更多相关文章

  1. Web Api 2 认证与授权 2

    HTTP Message Handler 在 Web Api 2 认证与授权 中讲解了几种实现机制,本篇就详细讲解 Message Handler 的实现方式 关于 Message Handler 在 ...

  2. Web APi之认证(Authentication)两种实现方式【二】(十三)

    前言 上一节我们详细讲解了认证及其基本信息,这一节我们通过两种不同方式来实现认证,并且分析如何合理的利用这两种方式,文中涉及到的基础知识,请参看上一篇文中,就不再叙述废话. 序言 对于所谓的认证说到底 ...

  3. Web APi之认证(Authentication)两种实现方式后续【三】(十五)

    前言 之前一直在找工作中,过程也是令人着实的心塞,最后还是稳定了下来,博客也停止更新快一个月了,学如逆水行舟,不进则退,之前学的东西没怎么用,也忘记了一点,不过至少由于是切身研究,本质以及原理上的脉络 ...

  4. 转 Web APi之认证(Authentication)两种实现方式【二】(十三)

    前言 上一节我们详细讲解了认证及其基本信息,这一节我们通过两种不同方式来实现认证,并且分析如何合理的利用这两种方式,文中涉及到的基础知识,请参看上一篇文中,就不再废叙述废话. 序言 对于所谓的认证说到 ...

  5. Web APi之认证

    Web APi之认证(Authentication)两种实现方式后续[三](十五)   前言 之前一直在找工作中,过程也是令人着实的心塞,最后还是稳定了下来,博客也停止更新快一个月了,学如逆水行舟,不 ...

  6. Shiro集成web环境[Springboot]-认证与授权

    Shiro集成web环境[Springboot]--认证与授权 在登录页面提交登陆数据后,发起请求也被ShiroFilter拦截,状态码为302 <form action="${pag ...

  7. [转]Web APi之认证(Authentication)及授权(Authorization)【一】(十二)

    本文转自:http://www.cnblogs.com/CreateMyself/p/4856133.html 前言 无论是ASP.NET MVC还是Web API框架,在从请求到响应这一过程中对于请 ...

  8. Web APi之认证(Authentication)及授权(Authorization)【一】(十二)

    前言 无论是ASP.NET MVC还是Web API框架,在从请求到响应这一过程中对于请求信息的认证以及认证成功过后对于访问页面的授权是极其重要的,用两节来重点来讲述这二者,这一节首先讲述一下关于这二 ...

  9. 033.Kubernetes集群安全-API Server认证及授权

    一 Kubernetes集群安全 1.1 安全机制 Kubernetes通过一系列机制来实现集群的安全控制,其中包括API Server的认证授权.准入控制机制及保护敏感信息的Secret机制等.集群 ...

随机推荐

  1. 问题:使用ajax跳转到新页面无效(浏览器Safari)

    问题:使用ajax跳转到新页面无效(浏览器Safari)   window.open("{% url "runtestinfo" %}")   但是使用loca ...

  2. dedecms 后台修改系统设置,但是config.cache.inc.php文件不能写入

    fopen居然返回false,既不是目录或文件权限相关问题,也不是文件路径问题(相对路径.绝对路径)等,更不是打开文件的模式问题(r,w,a等).网上搜了一会,说到返回false的原因无非都是上面三种 ...

  3. Zabbix3.2下Template App Zabbix Server+Template OS Linux Item

    序号 Name Key 返回值 释义1 Agent ping agent.ping 1 就是ping一下2 Avaliable memory vm.memory.size[available] 563 ...

  4. ucore-lab1-练习2report

    练习二实验报告 1.从CPU加电后执行的第一条指令开始,单步跟踪BIOS: 1.1默认的gdb需要进行一些额外的配置才能进行qemu的调试任务,qemu和gdb之间使用网络端口1234进行通信. la ...

  5. AngulairJS表单输入验证与mvc

    AngulairJS表单输入验证 1.表单中,常用的验证操作有:$dirty 表单有填写记录.$valid 字段内容合法的.$invalid 字段内容是非法的.$pristine 表单没有填写记录.$ ...

  6. 承载地图的div如果隐藏再显示,则定位时会定位到页面左上角

    承载地图的div如果隐藏再显示,则定位时会定位到页面左上角. 解决方法:不隐藏,改变div的高度.在div上利用z-index加一个新的不透明的div.

  7. Unity之MVC 模式

    MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式.这种模式用于应用程序的分层开发. Model(模型) - 模型代表一个存取数据的对象或 JAVA POJO.它 ...

  8. MDK生成.bin

    方法1: 默认选择编译输出的路径输出bin fromelf.exe --bin -o "$L@L.bin" "#L" 保存编译 方法2: 在要输出的目录下,新建 ...

  9. ajax中的contendType和dataType知识点梳理

    在ajax中有2个参数比较重要,之前一直没有搞清楚,下面我们开始梳理一下 1.contentType字段:这个字段的意思,ajax发送给后端的数据是什么类型 如果在ajax中不指定这个属性,则默认是u ...

  10. Django的CBV的学习

    之前我们在路由匹配的时候,一个url对应一个函数,其实我们还可以一个url对应一个类,这个就是CBV,下面我们来简单的介绍一下CBV 一.CBV的基本用法 1.在路由匹配中要这样写,class_log ...