1.认识OAuth2.0

简介: OAuth2.0是一种开放授权标准,允许第三方应用在用户授权下安全访问资源,无需获取用户账号密码。其四种模式——授权码、简化、密码和客户端模式,适用于不同场景,广泛用于API授权与单点登录,保障系统间资源共享的安全性与灵活性。

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服务资源,与用户无关。

相关文章
|
机器学习/深度学习 算法 计算机视觉
SORT新方法AM-SORT | 超越DeepSORT/CO-SORT/CenterTrack等方法,成为跟踪榜首
SORT新方法AM-SORT | 超越DeepSORT/CO-SORT/CenterTrack等方法,成为跟踪榜首
1017 0
|
存储 消息中间件 SQL
Flink 必知必会经典课程8:Flink Connector 详解
关于Flink Connector的详解,本文将通过四部分展开介绍:1. 连接器;2. Source API;3. Sink API;4. Collector的未来发展。
Flink 必知必会经典课程8:Flink Connector 详解
|
9月前
|
编解码 缓存 关系型数据库
阿里云服务器2核2G、2核4G、2核8G、4核8G租用活动价格参考:适合个人和中小企业用户
阿里云个人和普通企业用户通常会选择2核2G、2核4G、2核8G、4核8G等配置,本文为大家介绍了经济型e、通用算力型u1/u2a及企业级c9i/g9i等实例类型的特点与适用场景,并分享了最新活动价格,如38元轻量应用服务器、99元经济型e云服务器等。同时还提出了高性价比配置选择建议,以供对比和选择参考。
|
7月前
|
弹性计算
阿里云99元服务器续费多少钱?还是99元1年,亲测可行!
阿里云99元云服务器(ECS经济型e实例:2核2G/3M带宽/40G ESSD盘),首年99元,续费同价99元/年,限“99计划”活动期内使用,当前活动截止至2027年3月31日。买完即享续费资格,每年仅一次,长期低价锁定超值。
1764 3
|
安全 Shell Linux
Shellshock漏洞与永恒之蓝(WannaCry)勒索病毒深度分析
本文深度剖析了Shellshock漏洞与永恒之蓝(WannaCry)勒索病毒。Shellshock是2014年发现的Bash漏洞,允许攻击者通过环境变量执行任意命令,影响几乎所有Linux/Unix系统。永恒之蓝是利用Windows SMBv1协议漏洞的工具,导致2017年WannaCry全球爆发,感染超20万台设备。文章详细分析了两者的漏洞原理、影响范围、检测方法及修复方案,并提出通用安全防护建议,包括补丁管理、防御纵深、备份策略和安全意识培养,强调主动防御的重要性以应对复杂网络威胁。
1458 4
|
传感器 存储 人工智能
一文彻底搞清楚数字电路
数字电路是处理离散二进制信号(0和1)的电子电路,由逻辑门(如与门、或门等)组成,实现各种逻辑运算。它在计算机、通信、自动控制和数字信号处理等领域广泛应用。例如,CPU通过数字电路执行算术和逻辑运算,PLC用于工业自动化控制,数字滤波器则用于信号处理。数字电路以高电平(如5V)表示1,低电平(如0V)表示0,简化了信号处理并提高了系统的可靠性和抗干扰能力。
2484 0
一文彻底搞清楚数字电路
|
运维 安全 Linux
Softether详解(一)——V*N与softether概述
Softether详解(一)——V*N与softether概述
1656 3
|
存储 Oracle 关系型数据库
【实操】单表数据量 200 GB,PostgreSQL 怎么应对??
【实操】单表数据量 200 GB,PostgreSQL 怎么应对??
1119 1
|
存储 算法 安全
什么是SHA-256值
【8月更文挑战第24天】什么是SHA-256值
2643 1
Postman调试grpc
Postman调试grpc
1178 1

热门文章

最新文章