1.认识OAuth2.0

简介: OAuth2.0是一种开放授权标准,允许第三方应用在用户授权下安全访问资源,无需获取用户账号密码。其核心是通过令牌(token)实现有限授权,广泛用于第三方登录、服务间资源调用等场景,支持授权码、简化、密码和客户端四种模式,兼顾安全性与灵活性。

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


目录
相关文章
|
4月前
|
缓存 Java Nacos
@RefreshScope热更新原理
本文深入解析Spring Cloud中@RefreshScope注解实现配置热更新的原理。通过分析其组合注解特性,重点剖析@Scope("refresh")如何借助动态代理与缓存机制,在配置变更时触发Bean重建,结合Nacos实现配置自动刷新,从而达到无需重启应用即可生效的效果。
143 6
@RefreshScope热更新原理
|
4月前
|
API 数据库 uml
如何写好一篇技术方案
本项目旨在升级知识库基础能力,优化目录与文档管理分离、拖拽交互不流畅等问题,提升用户体验。涵盖需求背景、功能模块、流程图、API及数据库设计,并通过图表与排期卡明确开发计划,助力团队高效协作推进。
100 1
 如何写好一篇技术方案
|
4月前
|
缓存 Java 数据库连接
MyBatis常见配置
本文介绍MyBatis核心配置,包括属性加载优先级(方法参数 > resource/url > properties元素)、常用配置项如缓存、延迟加载、执行器类型,以及多环境配置与事务管理(JDBC/MAINTAINED),适用于多数据源场景。
58 0
|
4月前
|
监控 算法 Unix
IO/线程 Thread.sleep(0) 到底有什么用(读完就懂)
本文深入解析Thread.Sleep的原理与应用,结合操作系统调度机制,揭示Sleep(1000)未必准时唤醒、Sleep(0)主动让出CPU等行为的本质,帮助开发者正确理解线程休眠与CPU竞争的关系。
65 0
|
4月前
|
安全 Java 数据安全/隐私保护
4.认识SpringSecurity
Spring Security 是基于过滤器链的成熟安全框架,提供认证、鉴权及防御 CSRF 等攻击的核心功能,支持多种认证方式与灵活的权限控制模型。
55 0
|
4月前
|
存储 缓存 算法
IO/线程 零拷贝
实现文件传输时,传统方法因频繁的上下文切换和内存拷贝导致性能低下。零拷贝技术通过减少系统调用和内存复制,提升传输效率,尤其适用于小文件。对于大文件,宜采用异步IO结合直接IO,避免PageCache负面影响,从而优化高并发场景下的性能表现。
88 0
|
25天前
|
人工智能 JavaScript Linux
Token立省47%+原生电脑操控:GPT-5.4+OpenClaw(阿里云/Win11/Mac/Linux)部署流程+避坑手册
2026年3月,OpenAI重磅发布GPT-5.4,不仅带来原生电脑操控、100万Token上下文等颠覆性升级,更凭借Tool Search功能为OpenClaw用户节省47% Token消耗,价格仅为Claude Opus的一半,成为OpenClaw生态的性价比新标杆。Every.to团队实测后,连Claude死忠粉都转向GPT-5.4,印证了其在OpenClaw中的适配优势。
850 5
|
5月前
|
人工智能 运维 Cloud Native
一起聊聊大规模 AI Agent 部署与运维实战
诚挚地邀请您参加将于 11 月 28 日(周五)下午,在北京阿里中心举办的 【企业 AI 原生应用架构升级】主题研讨会。
|
4月前
|
存储 人工智能 运维
云栖实录:重构可观测 - 打造大模型驱动的云监控 2.0 与 AIOps 新范式
大模型时代驱动智能运维变革,阿里云通过统一可观测平台、UModel数字孪生与AIOps Agent,实现数据、认知、决策的全链路升级,重构运维新范式。
627 0
|
6月前
|
存储 人工智能 运维
日志服务&云监控全新发布,共筑企业智能运维新范式
阿里云推出Operation Intelligence新范式,通过日志服务SLS与云监控2.0,实现从感知、认知到行动闭环,推动运维迈向自决策时代。
488 1
日志服务&云监控全新发布,共筑企业智能运维新范式

热门文章

最新文章