1.认识OAuth2.0

简介: OAuth2.0是一种开放授权标准,允许第三方应用在用户授权下访问其资源,而无需获取用户账号密码。相比传统授权更安全,广泛用于第三方登录、服务间资源调用等场景,支持授权码、简化、密码和客户端四种模式,其中授权码模式最安全,适用于Web应用;简化模式适合无后端的应用如小程序;密码模式需高度信任;客户端模式则用于系统间内部通信。

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月前
|
Web App开发 存储 数据处理
Chrome 下载大文件报错!用 Streamsaver.js 完美填坑
本文探讨了Chrome下载大文件报“网络错误”的原因及解决方案。由于Chrome对Blob数据有大小限制,导致大文件下载失败。通过将responseType改为ArrayBuffer可临时解决1-2G文件问题,但超3G仍会崩溃。最佳方案是使用Streamsaver.js实现流式下载,边接收边保存,避免内存溢出,完美支持超大文件下载。
1724 3
|
2月前
|
JSON Dubbo Java
Feign远程调用
本章介绍如何使用Feign替代RestTemplate实现更优雅的HTTP跨服务调用。通过引入Feign,结合注册中心与注解声明,解决硬编码、可读性差等问题,并支持自定义配置、连接池优化与最佳实践,如客户端抽取为独立模块,提升代码复用性与维护性。
|
2月前
|
人工智能 供应链 搜索推荐
国内知名AI Agent智能体全解析:从技术原理到顶尖产品,一篇读懂
凌晨三点,财务实习生还在手动粘贴数据?市场经理苦于海量反馈无法分析?2025年,AI Agent正悄然改变职场:它能听懂指令、跨系统操作、自动生成报告,成为真正“会干活”的数字员工。从实在Agent的实用落地,到百度“伐谋”的自我演化,再到讯飞星火、通义千问、飞书Aily的行业深耕,智能体已进入金融、制造、医疗一线。成本降本、效率翻倍、决策更准——这不是未来,是正在发生的现实。了解国内主流智能体产品与真实应用场景,掌握这场“人工智能+”变革的关键入口。
503 0
|
7月前
|
Web App开发 监控 前端开发
2025前端性能优化三连击
2025前端性能优化三连击
398 94
|
6月前
|
存储 前端开发 JavaScript
深入探索WebGIS地图开发技术
随着互联网技术的不断发展,WebGIS(Web地理信息系统)逐渐成为地理信息展示与分析的重要工具。WebGIS 系统能够通过浏览器展示地图,并支持地图操作(如缩放、平移、查询等),因此在导航、城市规划、环境监测、公共安全等领域有着广泛应用。
|
7月前
|
存储 人工智能 前端开发
AI数字人口播直播模式系统开发布局逻辑
AI数字人口播直播系统结合先进AI技术,实现数字人自动化直播,适用于品牌推广与内容创作。系统涵盖形象设计、技术架构、直播流程优化及合规性布局,为新媒体提供高效、智能的直播解决方案。
|
9月前
|
运维 安全 网络性能优化
工业路由器:企业网络的中流砥柱和个人路由器有什么区别?卓伊凡
工业路由器:企业网络的中流砥柱和个人路由器有什么区别?卓伊凡
923 11
工业路由器:企业网络的中流砥柱和个人路由器有什么区别?卓伊凡
|
9月前
|
JavaScript 前端开发 小程序
风靡全网的《羊了个羊》,其实可以用几百行代码复刻?
《羊了个羊》是一款曾在2022年9月风靡全网的小游戏,凭借第二关的超高难度成为现象级话题。本文通过CodeBuddy代码助手,探讨该游戏的核心机制与爆火原因,并尝试复刻其玩法。游戏结合“叠层消除+有限背包”设计,利用社交传播和心理驱动吸引用户,通关率极低的第二关更是激发了玩家的挑战欲。借助HTML和JS开发,我们逐步实现基础功能与优化,最终完成一个可运行的版本。无论是学习开发技巧还是理解爆款逻辑,这都是一次有趣的实践。
|
12月前
|
人工智能 JavaScript 安全
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
589 13
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
|
11月前
|
人工智能 数据可视化 定位技术
AI 小技巧 | PPT 也能用数据地图?
AI 小技巧 | PPT 也能用数据地图?
557 4