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.更新令牌

客户端的访问令牌过期后,需要使用更新令牌申请一个新的访问令牌

时间: 2024-10-23 03:44:49

OAuth2.0详解的相关文章

Oauth2.0详解及安全使用

引言:刚刚参加工作的时候接到的第一个任务就是接入新浪的联合登录功能,当时新浪用的还是oauth1.0协议.接入的时候没有对oauth协议有过多的了解,只是按照开放平台的接入流程进行开发,当时还在想这么麻烦就是为了作一个登录功能?(为当年的无知汗颜...).再后来上家公司需要开发一套自己的基于oauth2.0的联合登录功能,粗粗的看了下oauth2.0协议流程,自以为了解了便开始设计开发,现在来看真是漏洞无数啊(幸好现在功能已经下线).最近在现家公司要作部门内部分享,所以打算好好的研究一下oaut

30分钟学会EventBus3.0详解(二)(EventBus3.0的使用)(by星空武哥)

转载声明原创地址:http://blog.csdn.net/lsyz0021/article/details/52094855 30分钟学会EventBus3.0详解(一)(引入和初始化EventBus3.0) 30分钟学会EventBus3.0详解(二)(EventBus3.0的使用) 写完上篇文章,这篇这心不想写了,但是每周至少一篇的习惯不能改啊!虽然EventBus使用起来很简单,但是种类特别多,比如他有粘性事件和非粘性事件,他们又都含有四种模式,并且还要测试在ui线程和非ui线程,所以情

php踩过的那些坑(4) false,NULL,0,''详解

一.前方有坑 php开发过程中,难免会遇到这四个值:false,null,0,'',并且也会对这四个值进行比较,然后分别进行业务代码处理.一招不慎,就会踩到坑,影响数据判断的正确性和安全性,以至于造成代码不健壮,给程序的测试和运行造成很多的麻烦. 看如下代码: $a = NULL; $b = ''; $c = 0; $d = false; echo ($a == $b)?1:0; // 输出1 echo ($a === $b)?1:0; // 输出0 echo ($a == $c)?1:0; /

Mongostat 3.0详解

可以参考之前写的这篇博客: Mongostat 2.6详解 mapped Changed in version 3.0.0. Only for MMAPv1 Storage Engine. The total amount of data mapped in megabytes. This is the total data size at the time of the last mongostat call. vsize The amount of virtual memory in meg

centos7.2 安装zabbix3.0详解

关闭防火墙: systemctl stop firewalld.service systemctl disable firewalld.service 关闭selinux: [[email protected] ~]# setenforce 0 [[email protected] ~]# sed -i'/SELINUX/s/enforcing/disabled/' /etc/selinux/config 配置yun源 rpm -ivh http://repo.zabbix.com/zabbix

Android数据存储之GreenDao 3.0 详解(一)

前言: 今天一大早收到GreenDao 3.0 正式发布的消息,自从2014年接触GreenDao至今,项目中一直使用GreenDao框架处理数据库操作,本人使用数据库路线 Sqlite---->OrmLite---->GreenDao.今天白天一直在忙着公司的项目需求,只能晚上加班来学习最新的GreenDao 3.0使用方式了. GreenDao 介绍: greenDAO是一个对象关系映射(ORM)的框架,能够提供一个接口通过操作对象的方式去操作关系型数据库,它能够让你操作数据库时更简单.更

逻辑运算0==x和x==0详解

看许多大牛写的程序常常看到if(0==x){执行体},而自己写的程序常常使用if(x==0){执行体}.刚开始的时候我还很自信的认为这种表达方式是等价的,大牛们只是为了显摆下与众不同的格调.当读到C语言运算法结合性这部分的内容才恍然领悟大牛的考虑周全.分析过程如下: "="运算符的结合性是右结合(从右向左)"=="运算符的结合性是左结合. 0=i这种格式错误的 0==i和i==0是一样的. 看到这大家是不是明白了点.if(0==i)这么写的,是为了防止"=

百度大脑UNIT3.0详解之数据生产工具DataKit

在智能对话项目搭建的过程中,高效筛选.处理对话日志并将其转化为新的训练数据,是对话系统效果持续提升的重要环节,也是当前开发者面临的难题之一.为此百度大脑UNIT推出学习反馈闭环机制,提供数据获取.辅助标注工具DataKit,帮助企业提升数据处理效率. [快速了解什么是DataKit] DataKit是面向开发者提供的数据生产工具集,可以利用交互式学习.规则样本生成和多模型一致性检验等技术方法自动获取大量数据,并从中筛选出带标注.半标注和无标注3类样本,这些样本经过高效的预处理后形成新的训练数据,

OAuth2.0 原理简介

写在前面: 在正式介绍OAuth2.0之前我们先来看一个场景:小李是一个文艺小青年, 经常喜欢出去旅游并且把自己旅行中的美景照片分享到各大社交网站上,比如朋友圈,新浪微博.小李马上要向女朋友求婚了,他想把这三年来和自己女朋友出去旅游的照片打印出来做成照片墙,好在求婚的时候讲女友感动的一塌糊涂,然后你懂得...,那么问题来了,按照小李带女朋友一个月出去玩一次,每次分享30张照片,三年就是30 * 12 * 3 = 1080 张,小李现在想把这1080张照片全部打印出来他首先得找个提供打印照片服务的