沉梦听雨的编程指南 沉梦听雨的编程指南
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦数据库
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • RPC
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 搜索引擎
  • 多媒体框架
  • 虚拟机
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • 前端环境搭建
  • HTML与CSS
  • JS学习
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 脚手架搭建
  • 瑞吉外卖
  • 黑马点评
  • vue-blog
  • 沉梦接口开放平台
  • 用户中心
  • 聚合搜索平台
  • 仿12306项目
  • 壁纸小程序项目
  • RuoYi-Vue
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
Github (opens new window)

沉梦听雨

时间是最好的浸渍剂,而沉淀是最好的提纯器🚀
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦数据库
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • RPC
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 搜索引擎
  • 多媒体框架
  • 虚拟机
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • 前端环境搭建
  • HTML与CSS
  • JS学习
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 脚手架搭建
  • 瑞吉外卖
  • 黑马点评
  • vue-blog
  • 沉梦接口开放平台
  • 用户中心
  • 聚合搜索平台
  • 仿12306项目
  • 壁纸小程序项目
  • RuoYi-Vue
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
Github (opens new window)
  • 设计须知

  • UML画图

  • 权限校验

    • 什么是RBAC权限模型?
    • 那些鉴权相关的知识
    • 深入了解 Bearer 模式
    • JWT 基础小结
    • token令牌问题
    • 安全框架SpringSecurity入门
    • SpringSecurity+OAuth2入门
      • OAuth2.0 是什么?
      • OAuth2.0 角色
      • OAuth 2.0 运行流程
      • OAuth 2.0 授权模式
      • 密码模式
      • 授权码模式
      • 学习参考
  • 设计模式

  • 系统设计
  • 权限校验
沉梦听雨
2025-02-13
目录

SpringSecurity+OAuth2入门

# SpringSecurity + OAuth2 入门

# OAuth2.0 是什么?

OAuth(Open Authorization)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。

很多团队,内部会采用 OAuth2.0 实现一个授权服务,避免每个上层应用或者服务重复开发。

OAuth 允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据。

每一个令牌授权一个特定的网站(例如,视频编辑网站)在特定的时段(例如,接下来的 2 小时内)内访问特定的资源(例如仅仅是某一相册中的视频)。这样,OAuth 让用户可以授权第三方网站访问他们存储在另外服务提供者的某些特定信息,而非所有内容。

如果对接过微信网页授权 (opens new window)功能,就会发现分成两种方式:静默授权、手动授权。

前者只能获取到用户的 openid,而后者可以获取到用户的基本信息。

OAuth2.0 是用于授权的行业标准协议。OAuth2.0 为简化客户端开发提供了特定的授权流,包括 Web 应用、桌面应用、移动端应用等。

OAuth 1.0 协议体系本身存在一些问题,现已被各大开发平台逐渐废弃。

# OAuth2.0 角色

在 OAuth2.0 中,有如下角色:

  1. Authorization Server:授权服务器,用于认证用户。如果客户端认证通过,则发放访问资源服务器的令牌。

  2. Resource Server:资源服务器,拥有受保护资源。如果请求包含正确的访问令牌,则可以访问资源。

    • 提供管理后台、客户端 API 的服务,都可以认为是 Resource Server。
  3. Client:客户端。它请求资源服务器时,会带上访问令牌,从而成功访问资源。

    • Client 可以是浏览器、客户端,也可以是内部服务。
  4. Resource Owner:资源拥有者。最终用户,他有访问资源的账号与密码。

    • 可以简单把 Resource Owner 理解成人,他在使用 Client 访问资源。

# OAuth 2.0 运行流程

如下是 OAuth 2.0 的授权码模式的运行流程:

  1. 用户打开客户端以后,客户端要求用户给予授权。
  2. 用户同意给予客户端授权。(关键,即如何)
  3. 客户端使用上一步获得的授权,向认证服务器申请令牌。
  4. 认证服务器对客户端进行认证以后,确认无误,同意发放令牌。
  5. 客户端使用令牌,向资源服务器申请获取资源。
  6. 资源服务器确认令牌无误,同意向客户端开放资源。

# OAuth 2.0 授权模式

客户端必须得到用户的授权(Authorization Grant),才能获得访问令牌(Access Token)。

OAuth2.0 定义了四种授权方式:

  • (常用)授权码模式(Authorization Code)
  • 密码模式(Resource Owner Password Credentials)
  • 简化模式(Implicit)
  • 客户端模式(Client Credentials)

具体而言,网页授权流程分为四步:

  1. 引导用户进入授权页面同意授权,获取 code
  2. 通过 code 换取网页授权 access_token(与基础支持中的 access_token 不同)
  3. 如果需要,开发者可以刷新网页授权 access_token,避免过期
  4. 通过网页授权 access_token 和 openid 获取用户基本信息(支持 UnionID 机制)

# 密码模式

密码模式,

  • 用户向客户端提供自己的用户名和密码。
  • 客户端使用这些信息,向授权服务器索要授权。

在这种模式中,用户必须把自己的密码给客户端,但是客户端不得储存密码。这通常用在用户对客户端高度信任的情况下,比如客户端是操作系统的一部分,或者由一个著名公司出品。而授权服务器只有在其他授权模式无法执行的情况下,才能考虑使用这种模式。

如果客户端和授权服务器都是自己公司的,显然符合。

操作流程如下:

  1. 【用户】向【客户端】提供用户名和密码。
  2. 【客户端】将用户名和密码发给【授权服务器】,向后者请求令牌。
  3. 【授权服务器】确认无误后,向【客户端】提供访问令牌。

# 授权码模式

授权码模式,是功能最完整、流程最严密的授权模式。它的特点就是通过客户端的后台服务器,与授权务器进行互动。

一般情况下,在有客户端的情况下,我们与第三方平台常常采用这种方式。

操作流程如下:

  1. 用户访问客户端,后者将前者跳转到到授权服务器。
  2. 用户选择是否给予客户端授权。
  3. 假设用户给予授权,授权服务器将跳转到客户端事先指定的"重定向 URI"(Redirection URI),同时附上一个授权码。
  4. 客户端收到授权码,附上早先的"重定向 URI",向认证服务器申请令牌。这一步是在客户端的后台的服务器上完成的,对用户不可见。
  5. 授权服务器核对了授权码和重定向 URI,确认无误后,向客户端发送访问令牌。

# 学习参考

  • 芋道 Spring Security OAuth2 入门 | 芋道源码 —— 纯源码解析博客 (opens new window)
  • OAuth 2.0 — 官方文档 (opens new window)
  • OAuth 2.0 — 中文文档 (opens new window)
上次更新: 2025/2/13 17:32:18
安全框架SpringSecurity入门
设计模式基础入门

← 安全框架SpringSecurity入门 设计模式基础入门→

Theme by Vdoing | Copyright © 2023-2025 沉梦听雨 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式