单点登录 之 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,一经查实,立即删除!

相关文章

修改tomcat服务器图标,如何修改tomcat项目的图标(两种)

我们在查看网页的时候很多网站都有自己的小图标,系统读取这个标志的时候先从你的项目的根目录下读看有没有favicon.ico文件,如果有直接显示这个图标,如果没有,则会去webapps/root/下找这个文件,如果这两个地方都没有&a…

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

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

java学习(108):StringBuilder连接字符串和删除操作

public class test48 {//连接字符串public static String concatString(String base,String[] str){StringBuilder buildernew StringBuilder(base);//构建可变字符串for(String s:str){builder.append(" "s);}return builder.toString();}//删除空格public static …

cad怎么把图层英文变成中文_CAD图层管理器昨天是中文的今天怎么变英文 – 手机爱问...

2008-06-14ctrlaltdel,调不出运行输入 c回车打开组策略,在左侧选用户配置/管理模板/系统/CtelAltDel选项/在右侧选,“删除任务管理器”双击它,在打开的对话框中选择“未配置”,设置后按应用确定,重启电脑即可。 另一个…

pcl-三维点云库

pcl-三维点云库 pcl::PointCloud的一些属性值 width(int) two meanings:it can specify the total number of points in the cloud for unorganized point cloud datasets;it can specify the width (total number of points in a row) of an organized point cloud dataset.Th…

奇迹世界服务器不响应,sun-奇迹世界 目前常见问题解决方法

Q:游戏安装过程中提示“ctor.dll路径错误,无法查找相关模块”的解决方法A:下载时没有完整的下载到安装文件时发生类似的问题。先到C:\ProgramFiles\Common Files\InstallShield\6\Intel32文件夹然后将里面的文件删除后,重新安装游…

java学习(109):StringBuilder,stringbuffer,string区别

String、StringBuffer和StringBuilder区别 1、长度是否可变 String 是被 final 修饰的,他的长度是不可变的,就算调用 String 的concat 方法,那也是把字符串拼接起来并重新创建一个对象,把拼接后的 String 的值赋给新创建的对象S…

etlgr是什么服务器_ETL是指什么 - 金融行业 - ITPUB论坛-中国专业的IT技术社区

ETL 简介 frim wwwETL是建置或更新数据仓储中的内容时,对于所需之数据进行数据撷取、转换、加载的过程,由字面上即能得知它是由三个环环相扣的步骤所组成:Extract - 数据撷取、Transform - 数据转换与Load - 数据加载 。ETL ( Extract-Tran…

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

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

1001 A+B Format (20 分)

题意&#xff1a;给出俩个整数a,b(不超过10^9) &#xff0c;求ab的值 &#xff0c;并按照xxx,xxx,xxx的格式输出 #include <iostream> using namespace std; int main() {int a, b;cin >> a >> b;string s to_string(a b);int len s.length();for (int i …

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("请输入员工姓名"…

上传文件Base64格式(React)

记录一下上传文件时将文件数据转为Base64的方法 通过 FileReader对象创建一个实例&#xff0c;然后使用 readAsDataURL方法将数据转为Base64格式 注意: 读取过程是异步的 绑定onload事件&#xff0c;该事件在数据读取完成后触发 具体代码&#xff08;react项目中&#xff09;&a…

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

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

服务器水厂物资管理系统,水处理管理系统及水处理管理服务器 Water management systems and water treatment management server...

摘要&#xff1a;The present invention relates to a water treatment management system and a water treatment management server. As adjustment for the operators which are related with the water source is difficult, utilization of the regenerated water from th…

java学习(111):日期时间格式化

package com.zx; import java.text.DateFormat; 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.println(this.getSex(…

Java中组合、继承与代理之间的关系。

在Java中如何将一个已经定义好的类尽可能多的重复使用是提高开发效率和质量的关键。而下面我们要讲述的三种方式便是涉及到怎样去复用类让代码更优雅。 一、组合 定义&#xff1a;在新的类中产生现有类的对象。 组合的例子其实随处可见&#xff0c;比如说我们在类中定义一个Str…

鳗鱼刺多怎么处理图像_怎么在做鱼前去除鳗鱼刺?

展开全部去除鳗鱼鱼32313133353236313431303231363533e59b9ee7ad9431333365633937刺的方法: 鳃除法和背除法一、鳃除法1、将鱼洗净&#xff0c;去鳞、鳃、鳍后&#xff0c;从鳃部取出内脏。2、擦干水分&#xff0c;平放在菜墩上&#xff0c;掀起鳃盖&#xff0c;把头与脊骨连接…

游戏服务器红点系统,Unity简易的红点系统RedPoint System

由于是展示&#xff0c;主要就三个脚本using System.Collections;using System.Collections.Generic;using UnityEngine;public class RedPointConst{public const string main "Main";public const string mail "Main.Mail";public const string mailSy…

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…

[转帖]什么是α射线、β射线、γ射线

什么是α射线、β射线、γ射线 https://www.sohu.com/a/230945619_1001247211、α射线 放射性核素发生衰变时放出α粒子&#xff0c;产生α射线。α粒子是一个高速运动的氦原子核。对于天然放射系列的核素放出α粒子的能量一般在4&#xff5e;8兆电子伏(MeV)范围&#xff0c;初…