认证与授权

认证与授权,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. Python全栈开发 列表, 元组 数据类型知识运用及操作 range知识

    一.列表 1.什么是列表? 列表是一个可变类型,由  [ ] 表示,每一项元素用逗号隔开.列表能够装大量的数据,可以装对象的对象. 2.列表的索引和切片. 列表和字符串一样,也有索引和切片.只不过列表 ...

  2. PHPUnit 组织测试

    首先是目录结构 源文件夹为 src/ 测试文件夹为 tests/ User.php <?php class Errorcode { const NAME_IS_NULL = 0; } class ...

  3. python--第七天总结

    引言 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强...” [面向对象编程(Obj ...

  4. 二进制中1的个数(python)

    题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. # -*- coding:utf-8 -*- class Solution: def NumberOf1(self, n): ...

  5. Docker容器进入-命令行只显示-bash-4.1#

    bash-4.1# cp /etc/skel/.bash* /root/ bash-4.1# su [root@4a841f025562 ~]# [root@4a841f025562 ~]# [roo ...

  6. DC之setup-hold time详解

    转自一下站点: http://www.blogbus.com/bb2hh-logs/20463915.html

  7. Angular之输入输出属性

    一 父组件 company.component.ts import { Component, OnInit } from '@angular/core'; @Component({ selector: ...

  8. @CookieValue使用须知

    ------------------------siwuxie095                             @CookieValue 使用须知         使用 @CookieV ...

  9. Django的具体操作(一)

    一,首先说下什么是Django,Django其实就是一个框架,用python写的,能开发网站之类的. 二,django的组成 1,urls:网址入口关联到对应的views视图函数,(采用mvc开发模式 ...

  10. (五)ROS节点

    一. 理解ROS 节点: ROS的节点: 可以说是一个可运行的程序.当然这个程序可不简单.因为它可以接受来自ROS网络上其他可运行程序的输出信息,也可以发送信息给ROS网络,被其他 ROS 可运行程序 ...