书籍推荐

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. 20155308《网络对抗》Exp4 恶意代码分析

    20155308<网络对抗>Exp4 恶意代码分析 实践说明 实践目标 是监控你自己系统的运行状态,看有没有可疑的程序在运行. 是分析一个恶意软件,就分析Exp2或Exp3中生成后门软件: ...

  2. 20155325 Exp5 MSF基础应用

    目录 实验内容 遇到的问题 基础问题问答 老师!!!我实验三的C代码已经删除了,请求评分~~~ 实验内容 1.Windows服务渗透攻击--MS08-067 系统 虚拟机 参考博客 Windows X ...

  3. UWP-开发一个具有闹钟,天气预报,翻译,语音功能的Demo

    UWP即Windows 10中的Universal Windows Platform简称.即Windows通用应用平台,在Windows 10 Mobile/Surface(Windows平板电脑)/ ...

  4. 命令行模式和python交互模式

    一.命令行模式 在Windows开始菜单选择“命令提示符”,就进入到命令行模式,它的提示符类似C:>:. 二.Python交互模式 在命令行模式下敲命令python,就看到类似如下的一堆文本输出 ...

  5. SSISDB4:当前正在运行的Package及其Executable

    SSISDB 系列随笔汇总: SSISDB1:使用SSISDB管理Package SSISDB2:SSIS工程的操作实例 SSISDB3:Package的执行实例 SSISDB4:当前正在运行的Pac ...

  6. 如何唯一确定一个 Java 类?

    今天偶然想起之前和朋友讨论过的一个问题:如何唯一确定一个 Java 类?我相信大多数朋友遇到这个问题的回答都是:类的全路径呗.但事实上,唯一确定一个 Java 类,单单靠类路径是不够的,还要多加上一个 ...

  7. GitLab篇之Linux下环境搭建

    之前公司一直在使用微软的VSS和SVN做为源代码管理工具,考虑到VSS和SVN的局限性,个人一直建议我们应该采用Git来管理我们的源代码.Git的好处不多说相信大家也都知道的.Git不仅仅是一个源代码 ...

  8. 【转】Cocos2d-x 3.x基础学习: 总结数学类Vec2/Size/Rect

    转载:http://www.taikr.com/article/1847 在Cocos2d-x 3.x中,数学类Vec2.Size.Rect,是比较常用的类.比如设置图片位置,图片大小,两图片的碰撞检 ...

  9. dokuwiki编辑器修改-color插件-添加按钮

    需求 dokuwiki的编辑工具栏是以 MediaWiki 的为基础发展来的. 在它的编辑器color插件的颜色按钮中,我想添加新的按钮功能.如红色字体黄色背景的修饰,类似于涂中文字强调的意思. 步骤 ...

  10. Java 8 新特性---------Stream

    Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据. Stream使用一种类似用SQL语句从数据库查询数据的直观方式来提供一种对Java集合运算和表达的高阶抽象 ...