OAuth2.0详解
1.使用场景
A系统存放着订单信息
B系统需要查询A系统中的订单信息,但是必须要A系统验证通过后,才能查询。
此时,我们有两种验证方式:
1)拥有A系统的账户/密码
弊端是对A系统来说,直接提供账户/密码的方式非常不安全。
2)A系统给B系统颁发一个令牌,规定了令牌的使用范围和有效期,可以理解为一个通行证。
第二种方式,就是我们所说的OAuth授权。
2.OAuth原理
我们称待授权系统为“客户端”,授权系统为“服务器”
OAuth的原理是,“客户端”不能直接登录“服务器”,“客户端”登录时,“服务端”有一个“授权层”,会首先检验颁发给“客户端”的“令牌”是否有效,若有效,则允许登录。
3.OAuth验证流程

(A)客户端请求用户授权
(B)用户同意授权给客户端
(C)客户端使用上一步获得的授权,像服务器申请令牌
(D)服务器对客户端进行认证后,确认无误,同意发送令牌
(E)客户端使用令牌,向服务器请求资源
(F)服务器确认令牌无误,返回资源
上述步骤中,关键是用户如何给客户端授权。有了授权后,客户端就可以获得令牌,继而获得资源。
4.客户端授权的四种模式
授权码模式
简化模式
密码模式
客户端模式
5.授权码模式

(A)用户访问客户端,客户端将用户导向服务器,包含了“重定向URI”地址
(B)用户选择是否给予客户端授权
(C)若给予,服务器将用户导向“重定向URI”地址,同时附上一个授权码
(D)客户端收到授权码,附上“重定向URI”地址,向服务器申请令牌
(E)服务端核对授权码和重定向URI,确认无误,向客户端发送访问令牌和更新令牌
授权模式的特点是,需要通过客户端服务器,来和服务器端进行交互。
6.简化模式
简化模式不需要客户端服务器,直接通过浏览器向服务器申请令牌,跳过了“授权码”
所有步骤在浏览器中完成,不需要认证客户端。

(A)客户端将用户导向服务器
(B)用户决定是否给予客户端授权
(C)若授权,服务器将用户导向客户端指定的“重定向URI”,URI的hash部分包含了访问令牌。
(D)浏览器向服务器发出请求,不包括上一步收到的hash值
(E)服务器返回一个网页,其中包含的代码可以获取hash值中的令牌
(F)浏览器执行上一步获得的脚本,提取出令牌
(G)浏览器将令牌发给客户端
7.密码模式
用户向客户端提供自己的用户名和密码,客户端使用用户名/密码,向服务器索要授权
客户端不得储存密码,通常是一些大品牌信誉好的公司,才用这种模式。

(A)用户向客户端提供用户名/密码
(B)客户端讲用户名/密码发给服务器,请求令牌
(C)服务器确认无误,向客户端提供访问令牌
8.客户端模式
客户端以自己的名义,而不是用户的名义,向服务器进行认证。用户直接向客户端注册,客户端以自己的名义要求服务器提供服务,其实不存在授权问题。

(A)客户端向服务器进行身份认证,并要求一个访问令牌
(B)服务器确认无误,向客户端提供访问令牌
9.更新令牌
客户端的访问令牌过期后,需要使用更新令牌申请一个新的访问令牌
OAuth2.0详解的更多相关文章
- Oauth2.0详解及安全使用
		引言:刚刚参加工作的时候接到的第一个任务就是接入新浪的联合登录功能,当时新浪用的还是oauth1.0协议.接入的时候没有对oauth协议有过多的了解,只是按照开放平台的接入流程进行开发,当时还在想这么 ... 
- Oauth2.0详解,Oauth2.0协议原理
		角色: RO (resource owner): 资源所有者,对资源具有授权能力的人,通常比喻为用户 RS (resource server): 资源服务器,存储资源.并处理对资源的访问请求 Clie ... 
- 百度大脑UNIT3.0详解之嵌入式对话理解技术
		相信很多人都体验过手机没有网时的焦虑,没有网什么也做不了.而机器人也会遇到这样的时刻,没有网或者网络环境不好的情况下,无法识别用户在说什么,也无法回复用户.在AIoT(AI+物联网)飞速普及的现在,智 ... 
- 百度大脑UNIT3.0详解之知识图谱与对话
		如今,越来越多的企业想要在电商客服.法律顾问等领域做一套包含行业知识的智能对话系统,而行业或领域知识的积累.构建.抽取等工作对于企业来说是个不小的难题,百度大脑UNIT3.0推出「我的知识」版块专门为 ... 
- 百度大脑UNIT3.0详解之数据生产工具DataKit
		在智能对话项目搭建的过程中,高效筛选.处理对话日志并将其转化为新的训练数据,是对话系统效果持续提升的重要环节,也是当前开发者面临的难题之一.为此百度大脑UNIT推出学习反馈闭环机制,提供数据获取.辅助 ... 
- Mongostat 3.0详解
		可以参考之前写的这篇博客: Mongostat 2.6详解 mapped Changed in version 3.0.0. Only for MMAPv1 Storage Engine. The t ... 
- setTimout( , 0) 详解
		setTimout( , 0) 一.前言 前端工程师们工作久了,一般都会在某些地方看见过这样的代码: setTimeout(function(){ // TODO }, 0); 举个实例,移动端我们经 ... 
- CM自动化安装CDH5.14.0详解
		CDH5.14.0版本说明 CDH最早版本只包含hadoop.hive.hbase等基础组件,CDH5.14.0版本目前已经封装了spark.impala.kudu(CDH 5.13.x开始)等众多组 ... 
- Android数据存储之GreenDao 3.0 详解
		前言: 今天一大早收到GreenDao 3.0 正式发布的消息,自从2014年接触GreenDao至今,项目中一直使用GreenDao框架处理数据库操作,本人使用数据库路线 Sqlite----> ... 
随机推荐
- 补码复习的好例子---Int范围的科学解释
			Int范围的科学解释 这得从二进制的原码说起: 如果以最高位为符号位,二进制原码最大为0111111111111111=2的15次方减1=32767 最小为1111111111111111=-2的15 ... 
- 12-26 tableView的学习心得
			一:基础部分 UITableView的两种样式: 注意是只读的 1.UITableViewStytlePlain(不分组的) n 2.UITableViewStyleGrouped(分组的) 二:如何 ... 
- S50非接触式IC卡性能简介(M1)
			一.主要指标 分为16个扇区,每个扇区为4块,每块16个字节,以块为存取单位: 每个扇区有独立的一组密码及访问控制: 每张卡有唯一序列号,为32位: 具有防冲突机制,支持多卡操作: 无电源,自带天线, ... 
- eclipse安装spring和hibernate插件经验
			看网上的教程有时候不一定凑效,我是自己摸索的(看过尚硅谷的SSH视频),很多时候会安装不成功(或者安装结果与视频讲述不一致),但是安装过后,查看eclispe插件,会发现已经安装了(springIDE ... 
- 什么php?
			PHP是一种开源的通用计算机脚本语言,尤其适用于网络开发并可嵌入HTML中使用.PHP的语法借鉴吸收了C语言.Java和Perl等流行计算机语言的特点,易于一般程序员学习.PHP的主要目标是允许网络开 ... 
- 深入分析:Android中app之间的交互(一,使用Action)
			在我们开发Android App应用的时候,有些需求需要我们启动其他的App来处理一些逻辑,例如我们需要根据一个地址来调用系统或者相关的地图Map App,这样我们不用在自己的App中编写相应的功能, ... 
- 【LeetCode OJ】Pascal's Triangle
			Prolbem Link: http://oj.leetcode.com/problems/pascals-triangle/ Just a nest-for-loop... class Soluti ... 
- Nullsoft教程 NSIS初学者图文教程一
			Nullsoft教程 NSIS初学者图文教程一 来源:互联网 作者:佚名 时间:03-29 00:34:33 [大 中 小] Nullsoft Installation System(nsis) 是一 ... 
- 阅读<构建之法>第13、14、15、16、17章  与  《一个程序员的生命周期》读后感
			第十三章 软件测试 这一章介绍了很多关于测试的方法,比如说单元测试,代码覆盖率测试,构建验证测试,验收测试等,我有一个很纠结的问题,如果我开发软件,是把这么多测试全做完,还是挑一些测试来进行呢?如 ... 
- sublime text3 本地化
			博客園中搜到n篇 同題日誌 沒一篇靠譜 超級反感這種行為,浪費別人的時間無異於謀財害命 自動: Control+` (注意不是cmd+p) import urllib.request,os,hashl ... 
