书籍推荐

OAuth2 in Action -- 原理

OAuth2 Cookbook -- 实践

OAuth2 解决的问题域
  1. 开放系统间授权
  • 社交联合登录
  • 开放API平台
  1. 现代微服务安全
  • 单页浏览器App(HTML5/JS/无状态)
  • 无线原生App
  • 服务器端WebApp
  • 微服务和API间调用
  1. 企业内部应用认证授权(IAM/SSO)

OAuth2的原理

OAuth2的最简向导可以很清楚的说明.简单明了(地址在https://github.com/MissWangLove/Micro-Service中的pdf下面).

应用请求资源服务器,访问客户数据,在没有OAuth2的情况下,资源服务器区分不出请求过来的应用是恶意用户还是其他用户,数据都会返回. 有了OAuth2之后,使用授权服务器颁发给客户应用Access Token, 资源服务器拿到Access Token进行校验,验证通过之后才返回数据.

整体的流程就是:
客户应用向授权服务器请求Sccess Token ---> 授权服务器向用户征询意见,是否将权限授予客户应用 ---> 用户同意 ---> 授权服务器生成颁发Access Token给客户应用 ---> 客户应用请求资源服务器 ---> 资源服务器验证客户应用的Access Token ---> 验证通过,返回数据.

涉及到三个角色:

  • 客户应用(请求资源方)
  • 授权服务器(生成Access Token并颁发Access Token)
  • 资源服务器(验证Access Token,返回资源)

OAuth2的定义

什么是Oauth2
  1. OAuth2是用于REST/APIs的代理授权框架(delegated authorization framework)
  2. 是基于令牌Token的授权,在无需暴露用户密码的情况下,是应用能获取对用户数据有限访问权限
  3. 解耦认证和授权
  4. 标准安全框架,支持多种用例场景
  • 服务器端WebApp
  • 浏览器单页SAP
  • 无线/原生App
  • 服务器对服务器之间
令牌类比仆从钥匙(Valet Key)

也就是给应用有限的访问权限,让应用能够代表用户去访问用户的数据.

举个简单例子,让别人去你家取东西,将钥匙给他,东西在大厅,他仅仅能进入大厅,卧室的门和其他柜子的钥匙并没有给他,也就没有权限进行访问.

所以说关键点在于有限的访问权限,这个很重要.

OAuth2的优点和缺点

优点:

  • OAuth2.0比1.0更容易实现
  • 更安全,客户端不接触用户密码,服务器端更易于集中保护
  • 广泛传播并被持续使用
  • 短寿命和封装的token
  • 资源服务器和授权服务器解耦
  • 集中式授权,简化客户端
  • HTTP/JSON友好,易于请求和传递token
  • 考虑多种客户端架构场景
  • 客户可以具有有不同的信任级别

缺点:

  • 协议框架太宽泛,造成各种实现的兼容性和相互操作性差
  • 和OAuth1.0不兼容
  • OAuth2.0不是一个认证协议(是授权协议),OAuth2.0本身并不能告诉你任何用户信息.
OAuth2.0主要角色
  • 资源拥有着(RO): 资源的拥有人,想要分享某些资源给第三方应用
  • 客户应用: 通常是一个Web或者无线应用,需要访问用户的受保护资源
  • 资源服务器: Web站点或者Web service API,用户的受保护数据存在此处
  • 授权服务器:客户应用成功认证并获得授权之后,向客户应用颁发访问令牌Access Token
OAuth术语
  • 客户凭证: 客户的clientId和密码用于认证客户
  • 令牌: 授权服务器在接收到客户请求后,颁发的访问令牌
  • 作用域: 客户请求访问令牌时,由资源拥有者额外指定的细分权限(permission)
OAuth2的令牌类型
  • 授权码(Authorization Code Token): 仅用于授权码授权类型,用于交换获取访问令牌和刷新令牌
  • 刷新令牌(Refresh Token): 用于去授权服务器获取一个新的访问令牌
  • 访问令牌(Access Token): 用于去代表一个用户或服务直接去访问受保护的资源.
  • Bearer Token: 不管谁拿到Token,都可以访问资源,像现钞
  • Proof of Possession(PoP Token): 可以校验client是否对Token有名确的拥有权

访问令牌是最重要的.

OAuth2.0误解
  • OAuth并没有支持HTTP以外的协议
  • OAuth并不是一个认证协议
  • OAuth并没有定义授权处理机制
  • OAuth并没有定义token格式
  • OAuth2.0并没有定义加密算法
  • OAuth2.0并不是单个协议
  • OAuth2.0仅是授权框架,仅用于授权处理

OAuth的本质就是如何获取token和如何使用token.
OAuth是一种在系统间的代理授权协议(delegation authorization)
OAuth提供一个宽泛的协议框架,具体安全场景需要定制
OAuth使用代理协议的方式解决密码共享反模式问题

OAuth2.0的典型模型

授权码模式

简化模式(适用于单页应用)

密码模式

客户端模式

刷新令牌如何简化令牌的获取

模式选型

授权流程渠道(channels)

客户应用类型

四中OAuth2.0授权类型(Flows)

授权类型选择 ~ 流程

OAuth的极简pdf: https://github.com/MissWangLove/Micro-Service/tree/master/pdf

OAuth2的基本概念的理解的更多相关文章

  1. atitit.闭包的概念与理解attilax总结v2 qb18.doc

    atitit.闭包的概念与理解attilax总结v2 qb18.doc 1.1. 闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数.1 2. #---- ...

  2. JAVA中用堆和栈的概念来理解equals() "=="和hashcode()

    在学习java基本数据类型和复杂数据类型的时候,特别是equals()"=="和hashcode()部分时,不是很懂,也停留了很长时间,最后终于有点眉目了. 要理解equals() ...

  3. 对MP4一些概念的理解

    首先,对视频一些基本概念的理解: I帧:i帧又称为内编码帧,是一种自带全部信息的独立帧,可独立解码,可理解为一张静态图片,视频序列中的第一个帧始终是i帧,因为它是关键帧. P帧:P帧又称为帧间预测编码 ...

  4. 【C/C++】对于可重入、线程安全、异步信号安全几个概念的理解

    由于前段时间,程序偶尔异常挂起不工作,检查后发现时死锁了,原因就是:在信号处理函数里面调用了fprintf. printf等io函数是需要对输出缓冲区加锁,这类函数对本身是线程安全的,但是对信号处理函 ...

  5. k8s中几个基本概念的理解,pod,service,deployment,ingress的使用场景

    k8s 总体概览 前言 Pod 副本控制器(Replication Controller,RC) 副本集(Replica Set,RS) 部署(Deployment) 服务(Service) ingr ...

  6. 有关基于模型的设计(MBD)一些概念和理解(zz)

    http://www.matlabsky.com/thread-38774-1-1.html 本文转载于MathWorks中国高级工程师董淑成的帖子内容.为了方便阅读,对原文进行了重新整理编辑. 之前 ...

  7. 单片机与嵌入式 以及ARM DSP FPGA 几个概念的理解

    嵌入式设备一般要满足实时性的要求,而实时性是要求数据输入和输出的延时满足一定的要求.当然嵌入式一般都便携性都比PC要好,功能没有PC多,PC是通用,他是专用,一般只专注某些功能的实现,比如DSP专注数 ...

  8. 关于Git的暂存区这个概念的理解.

    Git中的暂存区成为stage或者是index.可以理解成一个"提交任务".Git暂存区是Git最成功的设计之一,但是也是最难理解的. 暂存区是一个介于工作区和版本库的中间状态.当 ...

  9. Z-Stack协议中几个重要概念的理解

    1. 原语     ZigBee设备在工作时,各种不同的任务在不同的层次上执行,通过层的服务,完成所要执行的任务.每一层的服务主要完成两种功能:根据它的下层服务要求,为上层提供相应的服务:另一咱是根据 ...

随机推荐

  1. 添加树莓派python程序自启动的方法

    首先确保网络,硬件连接都正确.保证py程序可以正确运行. 然后远程登录树莓派 打开这个文件来修改自启动,网上有很多方法都是新建一个脚本来完成的.由于我们是自启动python文件,所以命令会有不同. 如 ...

  2. MSP430F5438A的串口

    设置串口,最关键的是波特率的设置,推荐一个网站,很方便地计算波特率,http://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/MSP43 ...

  3. 一条insert语句插入数据库

    CREATE TABLE test_main ( id INT NOT NULL, value VARCHAR(10), PRIMARY KEY(id) ); oracle插入方式:INSERT IN ...

  4. 20155204《网络对抗》Exp8 Web基础

    20155204<网络对抗>Exp8 Web基础 一.基础问题回答 1.什么是表单 表单在网页中主要负责数据采集功能.一个表单有三个基本组成部分: 表单标签:这里面包含了处理表单数据所用C ...

  5. 2017-2018-2 20155231《网络对抗技术》实验八: WEB基础实验

    2017-2018-2 20155231<网络对抗技术>实验八:Web基础 实验要求: Web前端HTML(0.5分) 能正常安装.启停Apache.理解HTML,理解表单,理解GET与P ...

  6. HQL语句的3个小技巧

    1.巧用new map        在查询表中部分字段的值时,我们可以用map来封装这些字段的值,可以提高查询效率,而且查出数据也更小,传输到页面的速度也更快.  如:查询角色时,我们只想要 id, ...

  7. adb连接手机的两种方式

    adb连接手机进行调试有两种方式,一种使用USB线,一种使用无线WiFi. 第一种  使用USB线连接 1. 在手机上启用USB调试 2. CMD窗口输入adb devices,此时可以看到自己的设备 ...

  8. Selenium之前世今生

    前世 Selenium RC 早期的Selenium使用的是JavaScript注入技术与浏览器打交道,需要Selenium RC启动一个Server,将操作Web元素的API调用转化为一段段Java ...

  9. HTML快速入门(一)

    一.HTML 是什么? HTML 指的是超文本标记语言 (Hyper Text Markup Language) HTML 不是一种编程语言,而是一种标记语言 (markup language) 标记 ...

  10. Microsoft Dynamics CRM 增删改子表汇总子表的某个字段到主表的某个字段(通用插件)

    背景 经常有某个汇总子表的数量到主表的总数量,或者汇总子表的总价到主表的总价这种需求. 传统的做法: 1.就是为每个子表实体单独写成一个插件,但是这样不好复用. 2.主表的汇总字段是汇总货币类型,但是 ...