认识OAuth2.0

简介: OAuth2.0是一种开放授权标准,允许第三方应用在用户授权下安全访问资源,无需获取用户账号密码。其核心为“令牌机制”,支持四种模式:授权码模式(最安全,适用于Web应用)、简化模式(适用于前端单页应用)、密码模式(需高度信任)和客户端模式(服务间调用)。广泛用于第三方登录、API授权等场景,Spring Security可基于OAuth2实现单点登录与服务间资源共享。

1.什么是OAuth2.0
先说OAuth,OAuth是Open Authorization的简写。 OAuth协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是OAuth的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与 密码就可以申请获得该用户资源的授权,因此OAuth是安全的。
OAuth2.0是OAuth协议的延续版本,但不向前兼容(即完全废止了OAuth1.0)。
2.OAuth2.0使用场景
假设,A网站是一个打印照片的网站,B网站是一个存储照片的网站,二者原本毫无关联。
如果一个用户想使用A网站打印自己存储在B网站的照片,那么A网站就需要使用B网站的照片资源才行。 按照传统的思考模式,我们需要A网站具有登录B网站的用户名和密码才行,但是有OAuth2后,只需要A网站获取到使用B网站照片资源的一个通行令牌即可!这个令牌无需具备操作B网站所有资源的权限,也无需永久有效,只要满足A网站打印照片需求即可。
这么听来,是不是有点像单点登录?千万不要混淆概念!单点登录是用户一次登录,自己可以操作其 他关联的服务资源。OAuth2则是用户给一个系统授权,可以直接操作其他系统资源的一种方式。
总结一句:SpringSecurity的OAuth2可以做服务之间资源共享,也可以实现单点登录!
3.OAuth2.0四种授权模式
针对上面的获取照片,我们结合下图进行详细展开

授权码模式
流程
说明:【A服务客户端】需要用到【B服务资源服务】中的资源
● 第一步:【A服务客户端】将用户自动导航到【B服务认证服务】,这一步用户需要提供一个回调地址,以备 【B服务认证服务】返回授权码使用。
● 第二步:用户点击授权按钮表示让【A服务客户端】使用【B服务资源服务】,这一步需要用户登录B服务,也就是说用户要事先具有B服务的使用权限。
● 第三步:【B服务认证服务】生成授权码,授权码将通过第一步提供的回调地址,返回给【A服务客户端】。 注意这个授权码并非通行【B服务资源服务】的通行凭证。
● 第四步:【A服务认证服务】携带上一步得到的授权码向【B服务认证服务】发送请求,获取通行凭证token。
● 第五步:【B服务认证服务】给【A服务认证服务】返回令牌token和更新令牌refresh token。
场景
授权码模式是OAuth2中最安全最完善的一种模式,应用场景最广泛,可以实现服务之间的调用,常见的微信,QQ等第三方登录也可采用这种方式实现。

简化模式
流程
说明:简化模式中没有【A服务认证服务】这一部分,全部有【A服务客户端】与B服务交互,整个过程不再有授权码,token直接暴露在浏览器。
● 第一步:【A服务客户端】将用户自动导航到【B服务认证服务】,这一步用户需要提供一个回调地址,以备【B服务认证服务】返回token使用,还会携带一个【A服务客户端】的状态标识state。
● 第二步:用户点击授权按钮表示让【A服务客户端】使用【B服务资源服务】,这一步需要用户登录B服务,也就是说用户要事先具有B服务的使用权限。
● 第三步:【B服务认证服务】生成通行令牌token,token将通过第一步提供的回调地址,返回给【A服务客户端】。
场景
适用于A服务没有服务器的情况。比如:纯手机小程序,JavaScript语言实现的网页插件等。

密码模式
流程
● 第一步:直接告诉【A服务客户端】自己的【B服务认证服务】的用户名和密码
● 第二步:【A服务客户端】携带【B服务认证服务】的用户名和密码向【B服务认证服务】发起请求获取token。
● 第三步:【B服务认证服务】给【A服务客户端】颁发token。
场景
此种模式虽然简单,但用户将B服务的用户名和密码暴露给A服务,需要两个服务信任度很高才能使用。

客户端模式
流程
说明:这种模式其实已经不太属于OAuth2范畴。A服务完全脱离用户,以自己的身份去向B服务索取token。换言之用户无需具备B服务的使用权也可以。完全是A服务与B服务内部交互,与用户无关了。
● 第一步:A服务向B服务索取token。
● 第二步:B服务返回token给A服务。
场景
A服务本身需要B服务资源,与用户无关。

相关文章
|
2月前
|
网络协议 Linux Shell
阿里云安装freeswitch的步骤总结
本文介绍在阿里云上安装freeswitch系统三种安装方式:脚本、镜像及Docker。支持多种Linux系统,推荐最小化安装,提供下载地址、一键安装命令及卸载方法。安装后访问IP即可登录,默认账号密码为admin/admin,初始化需等待5-10分钟。
|
2月前
|
数据安全/隐私保护 索引
语雀文档自动更新到百炼知识库
计算巢AppFlow推出自动化流程,支持定时同步语雀文档至百炼知识库,实现RAG检索。通过简单配置即可完成多粒度文档同步,大幅降低人工维护成本,提升知识管理效率。
236 0
语雀文档自动更新到百炼知识库
|
JSON Java API
教你如何使用API接口获取数据
随着互联网技术的发展和应用的普及,越来越多的系统和应用提供API接口供其他系统和应用进行数据交互。通过API接口,我们可以获取到各种各样的数据,例如天气预报、股票行情、新闻摘要等等。本文将介绍如何使用API接口获取数据,并附有示例代码。
|
12月前
|
数据安全/隐私保护 SoC
基于PI控制的三相整流器控制系统的simulink建模与仿真,包含超级电容充电和电机
本课题基于MATLAB 2022a的Simulink平台,构建了PI控制的三相整流器控制系统,用于PMSM电机发电并为超级电容充电。系统通过调节电流和电压,实现高效能量管理和动力输出。核心模块包括三相整流器、超级电容及其显示模块、PI控制器。仿真结果无水印,完整展示了系统性能。系统原理涵盖交流转直流、超级电容快速充放电及电机驱动,适用于多种工况下的能量管理。
|
定位技术
简直完美!百度文库付费文档可以免费下载了!
hello,大家好,我是Jackpop,感谢您对平凡而诗意的关注。 今天,来跟大家聊一下百度文库。 我感觉百度文库是一个经久不衰的话题,蕴含着大量有价值的内容,尤其是对在校学生、教师等人员,非常有价值。
简直完美!百度文库付费文档可以免费下载了!
|
边缘计算 自动驾驶 物联网
5G技术的低延迟目标及其对4G的显著改进
5G技术的低延迟目标及其对4G的显著改进
1332 0
|
SQL Java 网络安全
实时计算 Flink版操作报错合集之SQLserver表没有主键,同步的时候报错如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
505 1
|
数据安全/隐私保护
matlab 曲线光滑,去毛刺,去离群值,数据滤波,高通滤波,低通滤波,带通滤波,带阻滤波
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
|
网络安全 Windows
华为USG6000V防火墙学习
华为USG6000V防火墙学习
665 0
华为USG6000V防火墙学习
|
开发工具 git
【遇坑记实 一】团队开发中不要随意git merge别的分支
【遇坑记实 一】团队开发中不要随意git merge别的分支
537 0