前言截止到现在,一一哥 已经带各位把Spring Security中的主要功能学完了,并且剖析了这些内容的底层实现原理,希望你可以有所收获 。
但是在安全认证领域,还有另一种很重要的授权机制---OAuth2.0开放授权 。而且OAuth2.0开放授权与Spring Security经常配合使用,这两者之间可以说是“焦不离孟,孟不离焦”的搭配关系,所以为了进一步掌握Spring Security,在这里 壹哥 给大家再介绍另一个OAuth2.0开放授权协议 。
OAuth2.0开放授权并不是Spring Security框架里的一部分,只是两者经常配合使用而已,所以我得先给大家普及一下OAuth2.0的内容,毕竟OAuth2.0的内容还是蛮难理解的 。
一. OAuth2.0简介1. OAuth2.0概述咱们先来看看在RFC6749号文件中对OAuth2.0的定义,如下图所示:
文章插图
简单来说,OAuth2.0 是一种授权机制,其内部引入了一个授权层,可以分离两种不同的角色:客户端和资源所有者 。资源所有者同意客户端(第三方应用程序)的请求以后,资源服务器就可以向客户端颁发短期的进入令牌(token),用来代替密码,客户端通过这个令牌,去请求有限的资源数据来使用 。所以OAuth2.0 的核心就是向第三方应用颁发令牌 。
2. OAuth2.0发展历程OAuth(Open Authorization)--开放授权,这是一种关于开放授权的协议标准 。所谓的OAuth2.0,表示这是OAuth协议第2版,但并不兼容之前的OAuth1.0协议,即现在已经完全废止了OAuth1.0协议 。
那么为什么会废止OAuth1.0协议呢?我们先来简单说一下OAuth协议的发展历程 。
2007年12月的时候,OAuth协议已经诞生了,并与2010年4月份,被IETF(国际互联网工程任务组)认可并作为认证授权的标准发布 。但是这个OAuth1.0协议有些致命缺陷,就是它的签名逻辑特别复杂,开发时对程序员来说极度恶心 。而且OAuth1.0的授权流程是很单一,存在较大的漏洞,容易被黑客攻击 。所以在2012年10月的时候,IETF又更新发布了OAuth2.0协议,在这个版本中,放弃了之前复杂的数字签名和加密方案,使用HTTPS来作为安全保障手段,这降低了程序员的开发难度 。但是OAuth2.0协议与OAuth1.0协议互不兼容,所以现在我们进行开发时,都是采用OAuth2.0协议,而不再采用OAuth1.0协议 。
3. OAuth2.0功能通过上一小节,我们了解到OAuth是一种关于开放授权的协议,该协议其实是一个 服务提供商 授权 第三方应用 获取 资源所有者 部分访问权限 的授权机制 。通俗的说,就是OAuth协议允许用户在不提供密码给第三方应用的情况下,使得第三方应用有权获取用户数据等基本信息 。在整个授权过程中,第三方应用都不必获取用户的密码,就可以取得用户部分资源的使用权限,所以OAuth是一种安全开发的协议 。
【一文搞懂OAuth2.0授权协议是怎么回事】比如我们在CSDN上进行登录时,可以利用CSDN这个平台自身注册的账号,也可以使用第三方账号(QQ、微信、微博等)来进行登录,如下图:
文章插图
比如我们选择利用QQ账号登录CSDN,如下图:
文章插图
这时候我们可以打开QQ扫码,或者点击自己的QQ头像,就可以实现利用QQ帐号登录到CSDN这个网站上 。在这个过程中,我们其实不必担心自己的QQ密码会泄露给CSDN,因为CSDN是拿不到我们的QQ密码的 。
在这个登录过程中,CSDN相对于QQ来说是第三方应用,QQ就是服务提供商 。在QQ内部,会有一个认证服务器作为专门的授权中心,QQ用户的用户名头像等信息都属于资源,这些资源可能会存放在一台专门的资源服务器上,也可能会直接存放在QQ的认证服务器上 。当CSDN经过了QQ的认证之后,就可以获取到QQ上的用户昵称、头像、性别等信息,从而实现利用QQ的用户,登录到CSDN的网站上,免除用户重复的注册过程 。
4. OAuth2.0使用场景根据上一小节,我们可以总结一下OAuth2.0的使用场景,大致如下:
- 第三方应用登录:比如利用QQ,微博,微信授权登录到其他网站或App 。
- 分布式或微服务项目中授权:在JAVA分布式或微服务开发时,后端业务拆分成若干服务,服务之间或前端进行请求调用时,为了安全认证,可以利用OAuth2.0进行认证授权 。
推荐阅读
- 一文带你读懂Python计算机视觉中的OpenCV手势识别方法
- 一文了解MQTT协议
- 穿衣搭配|水乳一定要“成套用”吗?很多人都没搞懂,难怪用大牌也是浪费
- 一文搞懂HTTP,TCP,UDP,Socket,WebSocket
- 一文让你彻底搞清楚,Linux零拷贝技术的那些事儿
- 一文读懂所有HTTP状态码含义
- HDMI和DP区别在哪里?电脑连接线怎么选,一文看懂连接线的历史
- 一文带你理解URI 和 URL 有什么区别?
- 十分钟搞懂手机号码一键登录
- 一图搞懂扫码登录的技术原理