1 什么是开放平台(Open Platform)

在软件行业和网络中,开放平台指软件系统通过公开其API使外部程序可增加该软件系统的功能或使用该软件系统的资源,而无需更改该软件系统的源码。
在互联网时代,把网站的服务封装成一系列计算机易识别的数据接口开放出去,供第三方开发者使用,这种行为就叫做Open API,提供开放API的平台本身就被称为开放平台。
很多应用都提供微信登录方式,减少了用户注册的繁琐。- 第一次使用牛客网时,相信很多人是直接使用三方帐号(比如QQ、微信、微博)登录

牛客网平台会直接使用你三方信息作为基础信息,对用户来说方便很多。那这到底是怎么实现的呢?三方把你的个人信息给了牛客网平台,它又怎么保证你的数据安全的呢?
其背后原理就是 OAuth 2.0。

2 OAuth 2.0 是什么?

“Auth”表示 “授权”, “O” 是 Open 简称,表示 “开放” ,表示 “开放授权”。

2007 年 OAuth 1.0 诞生,妄想一套授权机制打通全场景,e.g. Web、移动应用场景等,但这些场景并非完全相同,且还有安全上的固化攻击等问题,直接宣判死刑。于是2011 年的 OAuth 2.0 扩充授权许可机制类型,更加灵活适应各种场景。

Spring Security Oauth2 是什么?
Oauth2,是一种协议,安全授权协议,而 Spring Security Oauth2 是一种框架,它是根据 Oauth2 协议开发。
Spring Security 也是一种框架,一种提供声明式的安全访问控制解决方案的安全框架,跟OAuth没有直接关系。

用户管理、认证中心、网关之间的联系:
三个不同事物,网关是单独一个方向的内容,一般开放平台或者微服务框架下鉴权的工作都是在网关内完成,也就是认证(授权)完成【授权】,在网关完成【鉴权】,用户管理是独立于认证中心的存在,没有认证中心,用户管理一样要有。

静默登录实际上是通过【静默授权】这种方式实现的,但是这个有个前提或者限制性的条件,不需要获取用户的更详细的信息比如头像、性别等信息,只能获取到用户的唯一标识比如openid和union id信息,所以,需要考虑是否能满足生产环境需求。

OAuth 2.0 是一种授权协议。那如何理解这里的“授权”呢?

2.1 授权案例知多少?

2.1.1 华为面试场景

比如我当年准备去华为南研所参加面试,要是直接走大门,门卫会一把把我拦住,质问有无工牌。当然了我没有,于是就被要求去接待大厅做登记。然后到了前台,我说是来面试的,并出示了身份证和短信通知。小姐姐确认后给了我一张通行卡证,然后就能自由出入华为南研所啦。
本来我是无权限进入华为南研所的,但是经过前台小姐姐验证后,她发现我确实是被预约来面试的,于是给了张通行卡证。这个过程就是授权。

2.1.2 文章排版场景

比如我的公众号JavaEdge,日常运营手动一个个排版,繁琐劝退我的更新频率!后来发现个“xx”第三方软件,可高效排版文章内容。可xx又是如何能访问到我的文章数据的?因为公众号提供了开放平台,xx通过开放平台的 API 就能访问到文章数据。

只因我在xx软件里扫码同意了,xx就拿到了个访问令牌,通过它可获取到我所有文章数据并帮我排版了。
这也是授权。我要是不扫码同意,公众号也不会把这些数据给到三方软件。

其实该场景使用的就是授权码许可(Authorization Code)类型。它是 OAuth 2.0 中最经典、最完备、最安全、应用最广泛的许可类型。

3 为什么用 OAuth 2.0?

理解完上面两种场景,可以想象关于授权,最容易的方案就是提供令牌。你要去华为南研所面试,那接待大厅小姐姐就给你张通行证;xx要获取你的订单信息,你就把你的用户名密码给它。但稍微有些安全意识,我们都不会这样做。

因为你有了临时通行证,那以后都能自由出入园区了。所以,华为有一套完善的机制,通过给你一张临时的通行证,达到在保证安全情况下,还能让你进入园区。这就是 OAuth 2.0。它通过给xx软件一个访问令牌,而不是让xx拿着你的用户名密码获取订单。

OAuth 2.0 授权协议,就是保证三方软件只有在获得授权后,才可进一步访问授权者的数据。因此也常被称为一种安全协议。

4 OAuth 2.0 的执行流程

我:“你好,xx。我正在 Google 浏览器上面,需要访问你来帮我处理我在公众号的文章。”

xx软件:“好的,我需要你给我授权。现在我把你引导到公众号开放平台,你在那里给我授权。”
开放平台:“你好。我收到了xx软件跳转过来的请求,现在已经准备好了一个授权页面。你登录并确认后,点击授权页面上面的授权按钮即可。”
我:“好的,开放平台。我看到了这个授权页面,已经扫码授权”
开放平台:“你好,xx打单软件。我收到号主的授权,现在要给你生成一个授权码,通过浏览器重定向到你的回调 URL 地址上面了。”
xx软件:“好的,开放平台。我现在从浏览器上拿到了授权码,现在就用这个授权码来请求你,请给我一个访问令牌 access_token 吧。”
开放平台:“好的,xx,访问令牌已经发送给你了。”
xx软件:“我现在就能使用访问令牌来获取他的公众号的全部文章了。”

我:“我已经能够看到我的文章了,现在就开始一键排版了。”

可见,xx的最终目的志在获取一个“访问令牌”。之后就有足够的 “权限”去请求我的公众号的所有文章了,也就能帮我排版了。

xx是拿授权码换取的访问令牌。那xx又是如何拿到授权码的?在我授权后才产生授权码,后续流程,都是在我对xx软件授权发生以后才产生的。所以究其本质流程:
生成授权码 => 生成访问令牌 => 使用访问令牌
所以 OAuth 2.0 授权核心就是颁发访问令牌、使用访问令牌

5 总结

OAuth 2.0 的核心是授权许可,即令牌机制。互联网中受保护资源,几乎都以 Web API 的形式提供访问,比如xx软件要获取我的文章数据,三方软件通过 OAuth 2.0 取得访问权限后,我也便把这些权限委托给了xx这种三方软件,所以 OAuth 2.0 是一种委托协议。
也正因为这种三方软件,每次都是用访问令牌而非用户名密码来请求用户数据,也大大减少数据安全风险。

参考

  • 《OAuth 2 in Action》
  • OAuth 2 协议规范
  • OAuth 2.0是要通过什么方式解决什么问题

OAuth 2.0实战(一)-通俗光速入门相关推荐

  1. OAuth 2.0实战课 08 笔记

    学习极客时间王新栋的<OAuth 2.0实战课>笔记. OAuth2.0可能导致的安全漏洞 CSRF 攻击 CSRF 的定义,<OAuth 2 in Action>这本书里的解 ...

  2. OAuth 2.0实战课 09 笔记

    学习极客时间王新栋的<OAuth 2.0实战课>笔记:实战:利用OAuth 2.0实现一个OpenID Connect用户身份认证协议. OIDC 是什么? OIDC 其实就是一种用户身份 ...

  3. OAuth 2.0实战课 10 笔记

    学习极客时间王新栋的<OAuth 2.0实战课>笔记:实战案例:使用Spring Security搭建一套基于JWT的OAuth 2.0架构 跟随文刊做一个spring security ...

  4. OAuth 2.0实战课04-06笔记

    JWT令牌 JWT 就是用一种结构化封装的方式来生成 token 的技术. 这种结构化体可以分为 HEADER(头部).PAYLOAD(数据体)和 SIGNATURE(签名)三部分.如下图: JWT如 ...

  5. 最全MySQL8.0实战教程 14 MySQL的存储过程 14.2 入门案例

    最全MySQL8.0实战教程 文章目录 最全MySQL8.0实战教程 14 MySQL的存储过程 14.2 入门案例 14.2.1 格式 14.2.2 操作 - 数据准备 14.2.3 操作 - 创建 ...

  6. Identity Server 4 原理和实战(完结)_----选看 OAuth 2.0 简介(上)

    https://www.yuque.com/yuejiangliu/dotnet/cg95ni 代表资源所有者的凭据 授权 Authorization Grant 授权是一个代表着资源所有者权限的凭据 ...

  7. OAuth 2.0 入门

    OAuth 是 open authorization 的简写,意思是开放授权.下面是维基百科的解释: OAuth的标志 开放授权(OAuth)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上 ...

  8. 【Android】0、Android 开发从入门到实战超详细路线图

    文章目录 入门 进阶 专项 实战 入门 刚开始入门时,可看 Android开发者官网,先在 Android Studio 的 IDE 上,跑一个 hello world 的 App 程序 然后入门阶段 ...

  9. OAuth 2.0中的scope和RBAC中的role有什么关系

    使用了OAuth2.0授权协议之后我们在API的访问控制时又多了一个scope的概念.它和角色访问控制的作用类似,有点让人有点模糊不清.今天我们来理清楚这两个概念. scope scope是 OAut ...

最新文章

  1. [Wordpress]wp_dropdown_categories() 添加自定义的attribute(属性)
  2. qt种实现搜索栏功能
  3. mysql - 一键安装方式- 课堂版
  4. 2015.12.08-2015.12.11 硕士毕业大论文 前端技术学习
  5. Hello, cnblog!
  6. 【QCustomPlot】1.1 - Qt .qch帮助文档导入使用
  7. 转载的 matlab破解版下载与安装教程
  8. [CTF]RAR加密原理
  9. JAVA调起clearcase_Eclipse集成配置管理工具ClearCase (ccrc_for_eclipse)
  10. 关于跨境电商shopee平台,你了解多少?
  11. am335xSD卡启动--文件系统制作
  12. [渝粤教育] 西南科技大学 语文教材教法 在线考试复习资料2021版
  13. 理解SparkSteaming窗口函数操作window()
  14. 深入浅出!二叉树详解,包含C语言代码
  15. Axure RP 8 介绍
  16. java freemarker 模版_使用Java进行FreeMarker的web模板开发的基础教程
  17. HDU 2112-HDU Today
  18. 郑码输入法 编码规则简介 汉字分解
  19. 辛烷值预测数据集说明
  20. 我在拼多多的三年......

热门文章

  1. S3C2440下clock的源码分析
  2. 打印表格留标题怎么设置_打印Excel表格时每页都打印标题行的设置方法
  3. 稀疏矩阵(三元组顺序表存储)6种操作的实现
  4. Python学习笔记——字符串、列表、元组、字典
  5. error: %preun(mysql-community-server-5.7.36-1.el6.x86_64) scriptlet failed
  6. 如何在jupyter中执行带参数的py文件
  7. eclipse 提示destination folder must be accessible
  8. 微信公众平台开发者模式(1)JAVA版接入
  9. 超实用硬盘数据恢复工具介绍!永久免费
  10. 状态空间描述到传递函数