认证与授权

认证与授权,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. logic:iterate(转)

    logic:iterate struts标签<logic:iterate>的用法 StrutsBeanJSPWeb脚本  <logic:iterate>主要用来处理在页面上输出 ...

  2. php 读取网站页面源码的经典函数

    Snoopy.class.php下载 include "inc/Snoopy.class.php"; //读取网页,返回网页源文件内容 function read_url($str ...

  3. 二叉树的镜像(python)

    题目描述 操作给定的二叉树,将其变换为源二叉树的镜像. 输入描述: 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ ...

  4. CentOS 下搭建Jenkins

    1.下载安装包 A 可以连接外网: 导入仓库 wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins.io/redhat-stable/jen ...

  5. DialogFragment 对话框 碎片

    package com.example.m_evolution; import android.app.Dialog; import android.app.DialogFragment; impor ...

  6. JSON Extractor

    JMeter处理responses 的json 对于请求1返回的结果,处理以后作为请求2的参数,JMeter提供了JSON 提取器 比如 responses 返回: {"statusCode ...

  7. 多线程通信(wait和notify)

    线程通信概念: 线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体,线程间的通信就成为整体的必用方式之一.当线程存在通信指挥,系统间的交互性会更强大,在提高CPU利用率的同时 ...

  8. 使用BulkCopy报错 从 bcp 客户端收到一个对 colid 19 无效的列长度

    ====System.Data.SqlClient.SqlException: 从 bcp 客户端收到一个对 colid 19 无效的列长度. 从0开始数,数据库上表的第19列

  9. swift - UIWebView 和 WKWebView(iOS12 之后替换UIWebView)

    1.iOS12 之前 使用 UIWebView 1> private lazy var webV : UIWebView = { let v = UIWebView(frame: self.vi ...

  10. swift - 根试图控制器的手势返回冲突 - push 新的tabbar控制器手势冲突

    1. 禁用手势 和开启手势 extension JYRTSShopListController: UIGestureRecognizerDelegate { /// 禁止使用手势返回 func for ...