单点登录 之 OAuth

OAuth2.0是什么

OAuth2.0是什么——豆瓣和QQ的故事

OAuth简单说就是一种授权的协议,只要授权方和被授权方遵守这个协议去写代码提供服务,那双方就是实现了OAuth模式。

举个例子,你想登录豆瓣去看看电影评论,但你丫的从来没注册过豆瓣账号,又不想新注册一个再使用豆瓣,怎么办呢?不用担心,豆瓣已经为你这种懒人做了准备,用你的qq号可以授权给豆瓣进行登录,请看。

第一步:在豆瓣官网点击用qq登录

第二步:跳转到qq登录页面输入用户名密码,然后点授权并登录

 

第三步:跳回到豆瓣页面,成功登录

 这几秒钟之内发生的事情,在无知的用户视角看来,就是在豆瓣官网上输了个qq号和密码就登录成功了。在一些细心的用户视角看来,页面经历了从豆瓣到qq,再从qq到豆瓣的两次页面跳转。但作为一群专业的程序员,我们还应该从上帝视角来看这个过程。

OAuth2.0是什么——上帝视角

  简单来说,上述例子中的豆瓣就是客户端,QQ就是认证服务器,OAuth2.0就是客户端和认证服务器之间由于相互不信任而产生的一个授权协议。呵呵,要是相互信任那QQ直接把自己数据库给豆瓣好了,你直接在豆瓣输入qq账号密码查下数据库验证就登陆呗,还跳来跳去的多麻烦。

  先上一张图,该图描绘了只几秒钟发生的所有事情用上帝视角来看的流程

 就这这张图,来说一下上述例子中的三个步骤在图中的表现。所用到的请求路径名称都是虚构的,所附带的请求参数忽略了一些非重点的。

如想了解每次的请求和响应的标准齐全的参数,还是去读那篇阮一峰的文章。http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html

第一步:在豆瓣官网点击用qq登录

  当你点击用qq登录的小图标时,实际上是向豆瓣的服务器发起了一个 http://www.douban.com/leadToAuthorize 的请求,豆瓣服务器会响应一个重定向地址,指向qq授权登录

  浏览器接到重定向地址 http://www.qq.com/authorize?callback=www.douban.com/callback ,再次访问。并注意到这次访问带了一个参数是callback,以便qq那边授权成功再次让浏览器发起这个callback请求。不然qq怎么知道你让我授权后要返回那个页面啊,每天让我授权的像豆瓣这样的网站这么多。

  至于访问这个地址之后,qq那边做出怎样的回应,就是第二步的事情了。总之第一步即对应了图中的这些部分。

第二步:跳转到qq登录页面输入用户名密码,然后点授权并登录

  上一步中浏览器接到重定向地址并访问 http://www.qq.com/authorize?callback=www.douban.com/callback

  qq的服务器接受到了豆瓣访问的authorize,在次例中所给出的回应是跳转到qq的登录页面,用户输入账号密码点击授权并登录按钮后,一定还会访问qq服务器中校验用户名密码的方法,若校验成功,该方法会响应浏览器一个重定向地址,并附上一个code(授权码)。由于豆瓣只关心像qq发起authorize请求后会返回一个code,并不关心qq是如何校验用户的,并且这个过程每个授权服务器可能会做些个性化的处理,只要最终的结果是返回给浏览器一个重定向并附上code即可,所以这个过程在图中并没有详细展开。现把展开图画给大家。

第三步:跳回到豆瓣页面,成功登录

 这一步背后的过程其实是最繁琐的,但对于用户来说是完全感知不到的。用户在QQ登录页面点击授权登陆后,就直接跳转到豆瓣首页了,但其实经历了很多隐藏的过程。

首先接上一步,QQ服务器在判断登录成功后,使页面重定向到之前豆瓣发来的callback并附上code授权码,即 callback=www.douban.com/callback 

页面接到重定向,发起 http://www.douban.com/callback 请求

豆瓣服务器收到请求后,做了两件再次与QQ沟通的事,即模拟浏览器发起了两次请求。一个是用拿到的code去换token,另一个就是用拿到的token换取用户信息。最后将用户信息储存起来,返回给浏览器其首页的视图。到此OAuth2.0授权结束。

转载于:https://www.cnblogs.com/mafeng/p/10081567.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/426272.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ueditor上传图片写入数据库_手把手教你,如何用交管12123上传驾驶证照片!

12123APP普及后方便了很多司机朋友足不出户就能办理交管业务然而交管业务网上办理过程中因为一些小问题的存在导致业务受理受阻例如:司机朋友在使用“交管12123”手机APP办理补换领机动车驾驶证等业务时出现了以下情况▼这种情况可能有两种原因:第一种是…

楚留香手游系统互通的服务器,楚留香手游互通服务器汇总 哪些服能一起玩

楚留香手游互通服务器汇总 哪些服能一起玩由第一手游网小编为大家带来,游戏中有一些服务器它的安卓和ios是互通的可以一起玩的,楚留香手游哪些服能一起玩?哪些服务器互通?来看看吧!楚留香手游互通服务器汇总少侠不必担…

java学习(110):日期date类

import java.util.Date; import java.util.Scanner;public class test51 {public static void main(String[] args){Scanner innew Scanner(System.in);System.out.println("请输入员工信息");test50 empnew test50();System.out.println("请输入员工姓名"…

修改fragment的进入动画_3DsMax—牛顿摆球(动量守恒摆球)动画

最终效果本篇为图文教程,已经将牛顿摆球动画视频教程放到3dsmax学习网中,需要看视频教程的请到3DsMax学习网(www.dddmax.cn)教程中观看。01打开一个牛顿摆球模型,如图所示。(模型素材链接在底部)02进入层次面板,开启【仅影响轴】&…

java学习(112):simpledateformat进行格式化

package com.zx; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; //员工信息类 //date类 public class test50 {private String name;private String sex;private Date birth;public void showme(){System.out.println(this.getName…

matlab 写excel 慢_我在12w+的Python库中,发现了让Excel快到起飞的秘密......

Amber | 作者图片源自网络在这篇文章里,小编向大家介绍了Excel在数据分析中的妙用。不知大家在看完后,有没有亲自动手去体验下呢?有没有遇到什么问题呢?虽说Excel在处理小批量数据时的优势显而易见,但软件终究不是万能…

华为云服务器安装win10系统,云服务器可以安装win10吗

云服务器可以安装win10吗 内容精选换一换本节定义了云耀云服务器上报云监控的监控指标的命名空间,监控指标列表,各项监控指标的具体含义与使用说明,用户可以通过云监控检索云耀云服务器服务产生的监控指标和告警信息。SYS.ECS对于不同的操作系…

java学习(113):Calendar类

import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class test53 {public static void main(String[] args){//获取当前时间并且获取当前系统时间创建一个日历实例Calendar calCalendar.getInstance();//获取当前时间的年月日int …

CEF 添加F5刷新快捷键

Keyboardcodes&#xff1a;https://www.androidos.net.cn/android/4.3_r1/xref/external/webkit/Source/WebCore/platform/chromium/KeyboardCodes.h 1.首先要让我们自己的CefClient这个类公有继承CefKeyboardHandler 2.添加键盘事件构造函数 virtual CefRefPtr<CefKeyboard…

python 离散数据时间序列图_每个人都学的会的数据分析

数据分析已经成为数据时代各行各业突破各自行业发展瓶颈的最有效手段&#xff0c;无论是公司职员还是个体商户或大公司管理者&#xff0c;都需要有数据分析的能力。很多人认为数据分析能力就是对数据进行描述和做出漂亮的统计图形的能力&#xff0c;这是狭隘的理解。数据分析能…

java学习(114):Calendar类方法before

import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; //员工信息类 //date类 public class test50 {private String name;private String sex;private Date birth;public void showme(){System.out.println(this.getName());System.out.p…

notion函数_Notion使用指南 | Database篇

注&#xff1a;本篇文章为「侦探学园」&#xff08;BestDet&#xff09;专栏「学习利器锻造铺」中的稿件&#xff0c;首发于「侦探学园」。上篇文章给大家介绍了Notion的一些基本内容&#xff0c;但对于小白来说&#xff0c;上手还是有一定难度的。简单回顾一下上一篇文章的内容…

java学习(115):math方法

//math import java.util.Scanner; public class test55 {public static void main(String[] args){Scanner innew Scanner(System.in);System.out.println("请输入一个数字&#xff0c;求出他的绝对值");System.out.println("绝对值为"Math.abs(in.nextIn…

zemax模拟ld_Zemax光学设计实例(83)在非序列模式下LD阵列的光束整形

导论&#xff1a;半导体激光器(Laser Diode&#xff0c;LD)是很常用的激光器件&#xff0c;普遍应用在光通信、激光泵浦等领域。阵列LD通常因为管芯空间分布的原因导致光束质量较差&#xff0c;需要光束整形以后才能使用。本文以LD bar条为例&#xff0c;介绍在非序列模式下对L…

玩转oracle 11g(13):命令学习1

1建表&#xff0c;建个学生表&#xff0c;包含id&#xff0c;学号&#xff0c;性别&#xff0c;姓名&#xff0c;年龄&#xff0c;电话号码&#xff0c;奖学金 create table Student ( id varchar(20) primary key not null,--学生的id为唯一主键 xh number(4), --学号 se…

Vagrant 构建 Linux 开发环境

Vagrant 是一个简单易用的部署工具&#xff0c;用英文说应该是 Orchestration Tool 。它能帮助开发人员迅速的构建一个开发环境&#xff0c;帮助测试人员构建测试环境, Vagrant 基于 Ruby 开发&#xff0c;使用开源 VirtualBox 作为虚拟化支持&#xff0c;可以轻松的跨平台部署…

我的世界javamod怎么装_装暖气片,10个有8个人都想知道的这点事儿!

话说&#xff0c;以前北方集中供暖施工&#xff0c;住户可是啥都不带操心的&#xff0c;毕竟...啥时候装&#xff0c;怎么装&#xff0c;装在哪儿&#xff0c;啥时间打压试水&#xff0c;啥时间开、关&#xff0c;公家都给安排妥妥地&#xff0c;反正家连家&#xff0c;户连户的…

玩转oracle 11g(14):命令学习2

6继续玩&#xff0c;改变查询结果列名 select name as xm,birthday as workday from student;--修改列名name为xm&#xff0c;birthday为workday select * from student; 7 select xh||sex from student--将选择的字段竖行排列 8 select name,sal, case when sal<10000 t…

玩转oracle 11g(15):命令学习3

11插入数据 INSERT INTO student VALUES (A007, null,女, 小华, 24-7月-15, 27,17891345129,32000,工程部); select * from student where xh is null;--查找某一项值为空 12 select coalesce(XH,0) from student--将空值转换为实际值 13按指定方式排序 select name,depo,sa…

gdal 压缩tif_Python | GDAL处理影像

GDAL栅格数据处理栅格数据介绍栅格数据读取读取部分数据集坐标变换重采样什么是栅格数据基本上是一个大的二维或三维数组没有独立的几何对象&#xff0c;只有像素的集合二维&#xff1a;黑白图片三维&#xff1a;彩色/假彩色&#xff0c;多光谱/高光谱可以存储几乎任何类型的数…