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

单点登录 之 OAuth相关推荐

  1. 关于oauth 2.0和单点登录

    什么是oauth 2.0,在实际场景中解决了什么问题? oauth 2.0是开放授权协议,核心思想是授权第三方应用访问用户的受保护资源,并且是以令牌的方式进行访问而不是用户名和密码,保证了安全性:例如 ...

  2. OAuth 2 实现单点登录,通俗易懂!

    [文章来源]https://sourl.cn/hMw7yT 单点登录是多域名企业站点流行的登录方式.本文以现实生活场景辅助理解,力争彻底理清 OAuth2.0 实现单点登录的原理流程.同时总结了权限控 ...

  3. java oauth sso 源码_基于Spring Security Oauth2的SSO单点登录+JWT权限控制实践

    概 述 在前文<基于Spring Security和 JWT的权限系统设计>之中已经讨论过基于 Spring Security和 JWT的权限系统用法和实践,本文则进一步实践一下基于 Sp ...

  4. oauth最后的确认按钮_spring-oauth集成cas单点登录,登陆完成进入授权页面后,按回退按钮进入404页面的问题...

    背景: 1.项目中使用耶鲁的cas做单点登录. 2.使用spring-oauth包实现oauth2服务 3.使用spring-cas做spring-security及cas的集成 现象: 开发报了个b ...

  5. shiro 跨域登录_六个高Star开源项目,让你更懂OAuth和单点登录

    现在大部分的网络应用,登录.注册.密码加密保存.token 管理等功能都是必要的.为了让用户的隐私更能得到保障,使用起来更方便,OAuth 协议和单点登录系统也就应运而生.今天 Gitee 介绍的六款 ...

  6. oauth2 单点登录_六个高Star开源项目,让你更懂OAuth和单点登录

    现在大部分的网络应用,登录.注册.密码加密保存.token 管理等功能都是必要的.为了让用户的隐私更能得到保障,使用起来更方便,OAuth 协议和单点登录系统也就应运而生.今天 Gitee 介绍的六款 ...

  7. 单点登录(shiro与Spring Security OAuth 2.0的集成)

    单点登录(shiro与Spring Security OAuth 2.0的集成) shiro项目采用ruoyi,OAuth采用pig 若依:https://gitee.com/y_project/Ru ...

  8. Cookie + Session登录-Token登录-SSO 单点登录-OAuth 第三方登录

    文章目录 1.Cookie + Session 登录 2. Cookie + Session 存在的问题 3.Token 登录认证 1. Token 机制实现流程 2. Token 机制的特点 3. ...

  9. 单点登录SSO,统一认证oAuth名词解释

    CAS( Central Authentication Service ):耶鲁大学开发的单点登录产品 SSO (Single Sign On):单点登录 oAuth(Open Authorizati ...

最新文章

  1. Windows 11 用户“怒了” :微软发推炫耀 3D 海龟表情包引争议
  2. python语言必背代码-好用到哭!请记住这20段Python代码
  3. php登录框注入,分享一个php的防火墙,拦截SQL注入和xss
  4. 使用nodejs实现OData的batch操作在Marketing Cloud里读取contact信息
  5. 树形结构的数据存储和数据库表设计
  6. 计算机原理试题b,计算机组成原理试题B答案
  7. CSS一个元素同时使用多个类选择器(class selector)
  8. 64位 linux 32位连接器,32位汇编程序在64位Ubuntu上的汇编和连接
  9. java c s是什么_Java在C/S
  10. 猪场管理网站php,某养猪场网站整站 v1.1
  11. Kubernetes Metrics-Server
  12. .Net ViewState的实现(转载)
  13. Show time来了,欢迎投注俺家小宝宝一票啊
  14. signature=b28f8fc969e82dcca916aa6ef86476cb,Method for verifying redundancy of secure systems
  15. 阿里云运行python_使用阿里云运行python
  16. html设置只在最后一页显示页脚,word文档只在最后一页插入页眉怎么操作
  17. 【系列1】使用Dockerfile创建带sshd服务的Centos Docker镜像
  18. Go --- html/template模板包的使用
  19. LDC(logic data center)与传统的(Internet Data Center-IDC)架构对比与优势(淘宝双十一经典案例解析)
  20. Ozone数据探查服务Recon2.0设计

热门文章

  1. docker小实战和应用
  2. TCP网络编程的基本流程
  3. 关于eclipse项目的x号报错的一些问题
  4. [BZOJ3791]作业
  5. Android之WebView网页滚动截图
  6. mysql批量生成修改表和列注释语句
  7. avalon框架,简单的MVVM
  8. Web Form要“jquery”ScriptResourceMapping。请添加一个名为 jquery (区分大小写)的 ScriptResourceMapping。”的解决办法。...
  9. Netty Associated -- ByteBuf
  10. 用cookie实现叶卡的记忆功能