SpringBoot实战(三十五)微服务集成OAuth2.0(UAA)
目录
- 一、知识回顾
- 1.1 什么是 OAuth2 协议?
- 1.2 OAuth2 的4个角色
- 1.3 OAuth2 的3种令牌
- 1.4 OAuth2 的5种认证方式
- 1.5 OAuth2 内置接口地址
- 二、UAA介绍
- 2.1 概述
- 2.2 UAA的主要功能
- 2.3 UAA 的应用场景
- 三、微服务集成
- 3.1 集成示例介绍
- 3.2 集成测试
一、知识回顾
在进行微服务集成前,我们先来回顾一下 OAuth2.0 的基础知识。
1.1 什么是 OAuth2 协议?
OAuth2(Open Authorization 2.0) 协议是 RFC 6749 文件,是一种 用于授权的开放标准协议,用于通过第三方应用程序访问用户在某个服务提供商上存储的资源,而无需共享用户的凭证(例如用户名和密码)。
OAuth 引入了一个授权层,用来分离两种不同的角色:客户端和资源所有者。…资源所有者同意以后,资源服务器可以向客户端颁发令牌。客户端通过令牌,去请求数据。
OAuth2.0 的运行流程如下图所示:

(A)用户打开客户端以后,客户端要求用户给予授权。
(B)用户同意给予客户端授权。
(C)客户端使用上一步获得的授权,向认证服务器申请令牌。
(D)认证服务器对客户端进行认证以后,确认无误,同意发放令牌。
(E)客户端使用令牌,向资源服务器申请获取资源。
(F)资源服务器确认令牌无误,同意向客户端开放资源。
简而言之:你要获取我(资源服务器)的资源的话,得先找他(授权服务器)授权。
1.2 OAuth2 的4个角色
OAuth2.0 认证过程中,涉及到的四个角色如下 :
客户端(Client):代表资源所有者与授权服务器进行交互的应用程序。可以是Web应用程序、移动应用程序或第三方服务。资源所有者(Resource Owner):即用户或系统的代表,拥有受保护资源的所有权。授权服务器(Authorization Server):负责验证资源所有者的身份并颁发访问令牌(Access Token)给客户端。它通常是一个独立的服务器,可以与资源服务器分离或合并。资源服务器(Resource Server):存储受保护的资源,并根据令牌的有效性进行访问控制。资源服务器可以是一个或多个服务,可以授权服务器分离或合并。
1.3 OAuth2 的3种令牌
- 授权许可(Authorization Grant):资源所有者授权客户端访问受保护资源的凭证,如:授权码、隐式授权、密码授权、客户端凭证等。
- 令牌(Access Token):用于标识授权许可的凭证,包括访问令牌、刷新令牌和身份令牌等。
- 令牌端点(Token Endpoint):客户端与授权服务器交互以获取或刷新令牌的API端点。
1.4 OAuth2 的5种认证方式
OAuth2.0 提供了五种认证方式:
| 授权类型 | grant_type 值 | 适用场景 | 安全性 |
|---|---|---|---|
| 授权码模式 | authorization_code | 有后端的 Web 应用 | 高 |
| 简化模式 | implicit | 纯前端应用(如 SPA) | 中 |
| 密码模式 | password | 高度信任的客户端(如第一方应用) | 低 |
| 客户端凭证模式 | client_credentials | 客户端访问自己的资源(M2M) | 中 |
| 刷新令牌模式 | refresh_token | 获取新的访问令牌 | 高 |
这里我们举例的是 授权码模式,篇幅有限,没有集成数据库。如果需要支持其他模式,需要对 AuthorizationConfig.java 中的内容进行改造。
1.5 OAuth2 内置接口地址
OAuth2.0 内置了6个接口地址,如下所示:
- /oauth/authorize:授权端点(核心)
- /oauth/token:获取令牌端点(核心)
- /oauth/confirm_access:用户确认授权提交端点
- /oauth/error:授权服务错误信息端点
- /oauth/check_token:用于资源服务访问的令牌解析端点
- /oauth/token_key:提供公有密匙的端点,如果你使用JWT令牌的话
二、UAA介绍
- 官方文档: https://docs.spring.io/spring-cloud-dataflow-samples/docs/current/reference/html/_security.html
2.1 概述
UAA(User Account and Authentication) 是 Cloud Foundry 提供的一个用户账户和认证服务,主要用于管理用户的身份验证和授权。UAA 支持多种认证机制,包括 Oauth2.0、OpenID Connect 等,能够为应用程序提供安全的用户管理和访问控制功能。UAA 的 核心功能是为用户提供统一的身份验证服务,并确保只有经过授权的用户才能访问特定的资源。
2.2 UAA的主要功能
UAA 的主要功能如下:
- 用户管理:UAA 允许管理员创建、管理和删除用户账户。用户可以通过用户名和密码进行登录,也可以通过其他身份提供者(如 LDAP、SAML 等)进行身份验证。
- OAuth2.0支持:UAA 实现了 OAuth2 协议,允许应用程序通过 OAuth2 进行授权和认证。OAuth2 是一种广泛使用的授权框架,允许用户授权第三方应用访问其资源,而无需共享其凭据。
- OpenID Connect支持:UAA 还支持 OpenID Connect,这是一种基于 OAuth2 的身份验证协议,允许应用程序验证用户的身份并获取用户的基本信息。
- 多租户支持:UAA 支持多租户架构,允许不同的组织或团队在同一 UAA 实例中管理各自的用户和权限。
- LDAP 集成:UAA 可以与 LDAP(轻量级目录访问协议)集成,允许企业使用现有的 LDAP 目录服务进行用户认证。通过 LDAP 集成,UAA 可以从 LDAP 服务器中获取用户信息,并将其映射到 UAA 中的用户角色和权限。
2.3 UAA 的应用场景
UAA 广泛应用于需要用户认证和授权的场景,特别是在微服务架构中。通过 UAA,开发者可以轻松地为多个微服务提供统一的身份验证和授权机制,而不需要每个服务都实现自己的认证逻辑。
在 Spring Cloud Data Flow 中,UAA 被用于保护数据流和任务的管理接口。通过 UAA,管理员可以控制哪些用户可以创建、部署和管理数据流和任务。UAA 还可以与 LDAP 集成,使得企业可以使用现有的 LDAP 目录服务来管理用户权限。
三、微服务集成
代码地址: https://gitee.com/acgkaka/SpringBootExamples/tree/master/springboot-mybatis-plus-oauth2.0
3.1 集成示例介绍
在示例项目中,包含两个核心服务:
- demo-eureka: 注册中心;
- demo-gateway: 网关中心;
- auth-server: 鉴权服务 – 相当于 “授权服务器”;
- **user-center: **用户服务 – 相当于 “资源服务器”。
包含五个基础启动包:
- common-spring-boot-starter: 基础公共包;
- jdbc-spring-boot-starter: JDBC数据库连接工具包;
- redis-spring-boot-starter: Redis缓存连接工具包;
- uaa-client-spring-boot-starter: “资源服务器” 工具包;
- uaa-server-spring-boot-starter: “授权服务器” 工具包。
整体项目目录结构如下:

“资源服务器” 工具包 uaa-client-spring-boot-starter 目录结构如下:

注意: 为了实现分布式鉴权,这里我们将token存到了redis缓存中。
“授权服务器” 工具包 uaa-server-spring-boot-starter 目录结构如下:

3.2 集成测试
1)启动本地redis和数据库,确保 mydb.sql 中的数据已被初始化。
2)启动所有服务,如下所示:

3)在 user-center 服务中,有测试接口:/user/list,如下所示:

我们直接使用 Postman 请求这个接口,如下所示:

可以看到,HTTP返回状态码为 401,返回内容中提示 unauthorized,没有权限,说明拦截成功。
4)在 auth-server 服务中,OAuth 2.0 默认的获取授权接口为:/oauth/token,如下所示:

我们输入相应的入参进行请求 token,这里我们以密码模式为例。如下所示:
- 请求地址: http://localhost:8081/oauth/token?grant_type=password&username=ACGkaka&password=123456&client_id=app&client_secret=app

这里我们成功获取到了 token。
5)将 token 作为鉴权请求头,再次请求 user-center 中的接口,如下所示:

可以看到,原本被拦截的接口已经可以正常访问了,HTTP状态码也正常返回200了。
代码地址: https://gitee.com/acgkaka/SpringBootExamples/tree/master/springboot-mybatis-plus-oauth2.0
整理完毕,完结撒花~🌻
相关文章:
SpringBoot实战(三十五)微服务集成OAuth2.0(UAA)
目录 一、知识回顾1.1 什么是 OAuth2 协议?1.2 OAuth2 的4个角色1.3 OAuth2 的3种令牌1.4 OAuth2 的5种认证方式1.5 OAuth2 内置接口地址 二、UAA介绍2.1 概述2.2 UAA的主要功能2.3 UAA 的应用场景 三、微服务集成3.1 集成示例介绍3.2 集成测试 一、知识回顾 在进行…...
K8s 1.27.1 实战系列(七)Deployment
一、Deployment介绍 Deployment负责创建和更新应用程序的实例,使Pod拥有多副本,自愈,扩缩容等能力。创建Deployment后,Kubernetes Master 将应用程序实例调度到集群中的各个节点上。如果托管实例的节点关闭或被删除,Deployment控制器会将该实例替换为群集中另一个节点上的…...
Spring Boot笔记(上)
01 概要 Spring Boot 是 Java 领域最流行的 快速开发框架,专为简化 Spring 应用的初始搭建和开发而设计。 一、Spring Boot 解决了什么问题? 传统 Spring 痛点 • 繁琐的 XML 配置 • 需要手动管理依赖版本 • 部署依赖外部 Web 服务器(如 …...
Mysql主从复制和Mysql高可用以及负载均衡配置
需要先配置MySQL主从复制,然后再在主MySQL服务器上配置MySQL Router。以下是详细说明和步骤: 1. 为什么需要先配置MySQL主从复制? MySQL主从复制是MySQL高可用性和负载均衡的基础,通过将数据从主服务器实时同步到从服务器&#…...
MySQL------存储引擎和用户和授权
9.存储引擎 1.两种引擎 MyISAM和InnoDB 2.两种区别 1.事务: MyISAM不支持事务 2.存储文件: innodb : frm、ibd MyISAM: frm、MYD、MYI 3.数据行锁定: MyISAM不支持 4.全文索引: INNODB不支持,所以MYISAM做select操作速度很快 5.外键约束: MyISAM…...
DeepSeek进阶应用(一):结合Mermaid绘图(流程图、时序图、类图、状态图、甘特图、饼图)
🌟前言: 在软件开发、项目管理和系统设计等领域,图表是表达复杂信息的有效工具。随着AI助手如DeepSeek的普及,我们现在可以更轻松地创建各种专业图表。 名人说:博观而约取,厚积而薄发。——苏轼《稼说送张琥》 创作者&…...
大白话react第十八章React 与 WebGL 项目的高级拓展与优化
大白话react第十八章React 与 WebGL 项目的高级拓展与优化 1. 实现 3D 模型的导入与动画 在之前的基础上,我们可以导入更复杂的 3D 模型,并且让这些模型动起来,就像在游戏里看到的角色和场景一样。这里我们使用 GLTF 格式的模型,…...
【WPF】Slider滑动方法(INotifyPropertyChanged、ValueChanged )响应速度对比分析
一、Slider基础用法 在 XAML 中添加一个 Slider 控件,并设置其基本属性: <Slider Minimum"0" <!-- 最小值 -->Maximum"100" <!-- 最大值 -->Value"50" <!-- 初始值 -->Width&quo…...
DeepSeek未来发展趋势:开创智能时代的新风口
DeepSeek未来发展趋势:开创智能时代的新风口 随着人工智能(AI)、深度学习(DL)和大数据的飞速发展,众多创新型技术已经逐渐走向成熟,而DeepSeek作为这一领域的新兴力量,正逐步吸引越…...
1-003:MySQL 的索引类型有哪些?
MySQL 中的索引类型主要分为以下几类,每种索引都有不同的适用场景和优化查询的作用: 1. 按存储结构分类 ① 聚簇索引(Clustered Index) 特点: InnoDB 引擎的 主键索引 就是 聚簇索引。数据与索引存储在一起ÿ…...
从0开始的操作系统手搓教程24——完成我们的键盘驱动子系统
目录 所以,我们现来说说转义字符 我们需要如何处理扫描码 当键入的是双字符键时 当键入的是字母键时 下一篇 我们下面来看看我们的键盘驱动子系统是一个怎么个事情。 驱动程序,你可以认为是对硬件的一层封装。我们按照手册规格的规定姿势࿰…...
git大文件传输报错
简述 git传输大于25M的文件时会报错,需要使用 Git LFS进行文件传输。 Git LFS(Large File Storage)是 GitHub 推荐的方式,可以管理大文件而不会影响 Git 性能。 操作流程 # 安装 Git LFS git lfs install# 将 PDF 文件添加到 G…...
基础玩转物联网-4G模块如何快速实现与MQTT服务器通信
目录 1 前言 2 环境搭建 2.1 硬件准备 2.2 软件准备 2.3 硬件连接 2.4 检查驱动 3 连接MQTT服务器 3.1 创建MQTT监听Topic 3.2 打开配置工具读取基本信息 3.3 设置连接参数进行数据交互 4 总结 1 前言 MQTT(Message Queuing Telemetry Transport)是一种轻…...
使用Beanshell前置处理器对Jmeter的请求body进行加密
这里我们用HmacSHA256来进行加密举例: 步骤: 1.先获取请求参数并对请求参数进行处理(处理成String类型) //处理请求参数的两种方法: //方法一: //获取请求 Arguments args sampler.getArguments(); //转…...
Python入门3:类与面对对象
目录 类 一、类的概念 二、类的定义和使用 2.1 类的定义 2.2 实例化对象 三、类的属性和方法 3.1 属性 属性的类型: 补充--私有属性 属性的操作: 3.2 方法 方法的类型: 补充--私有方法 方法的操作 四、面对过程和面对对象 …...
mac本地部署Qwq-32b记录
导语 昨天看到阿里开源了Qwq-32b,号称性能可以媲美Deepseek-R1。今天晚上有空就在Mac上折腾了一下,使用ollma进行了部署,效果感觉还不错,特此记录。 环境 硬件 型号:Macbook M1 Pro 14寸内存:512G 环境…...
【病毒分析】熊猫烧香病毒分析及其查杀修复
目录 前言 一、样本概况 1.1 样本信息 1.2 测试环境及工具 1.3 分析目标 二、具体行为分析 2.1 主要行为 2.1.1 恶意程序对用户造成的危害 2.2 恶意代码分析 2.2.1 加固后的恶意代码树结构图(是否有加固) 2.2.2 恶意程序的代码分析片段 三、解决方案(或总结) 3.1 …...
【语料数据爬虫】Python实现将Json语料数据转换成Word文档
前言 本文是该专栏的第1篇,后面会持续分享Python爬虫采集各种语料数据的的干货知识,值得关注。 本专栏为笔者精心推出的“语料数据”爬虫专栏,特别适合需要写作素材的同学,该专栏文章以采集最新的“语料数据”为主,最终篇幅将涵盖【百万级语料数据】库。 值得一提的是,…...
警惕AI神话破灭:深度解析大模型缺陷与禁用场景指南
摘要 当前AI大模型虽展现强大能力,但其本质缺陷可能引发系统性风险。本文从认知鸿沟、数据困境、伦理雷区、技术瓶颈四大维度剖析大模型局限性,揭示医疗诊断、法律决策等8类禁用场景,提出可信AI建设框架与用户防护策略。通过理论分析与实操案…...
做到哪一步才算精通SQL
做到哪一步才算精通SQL-Structured Query Language 数据定义语言 DDL for StructCREATE:用来创建数据库、表、索引等对象ALTER:用来修改已存在的数据库对象DROP:用来删除整个数据库或者数据库中的表TRUNCATE:用来删除表中所有的行…...
leetcode454 四数相加
四数相加Ⅱ的解法可以将四数分为两组,即“分组 哈希”: 初始化哈希表。 分组:nums1 和 nums2 一组,nums3 和 nums4 一组。 分别对 nums1 和 nums2 进行遍历,将所有 nums1 和 nums2 的值的和作为哈希表的 key&#x…...
RoboVQA:机器人多模态长范围推理
23 年 11 月来自 Google Deepmind 的论文“RoboVQA: Multimodal Long-Horizon Reasoning for Robotics”。 本文提出一种可扩展、自下而上且本质多样化的数据收集方案,该方案可用于长期和中期的高级推理,与传统的狭窄自上而下的逐步收集相比,…...
C 语言数据结构(二):顺序表和链表
目录 1. 线性表 2. 顺序表 2.1 概念及结构 2.1.1 静态顺序表(不常用) 2.1.2 动态顺序表(常用) 编辑 2.2 练习 2.2.1 移除元素 2.2.2 删除有序数组中的重复项 2.2.3 合并两个有序数组 2.3 顺序表存在的问题 3. 链表 …...
无公网IP也能远程控制Windows:Linux rdesktop内网穿透实战
文章目录 前言1. Windows 开启远程桌面2. Linux安装rdesktop工具3. Win安装Cpolar工具4. 配置远程桌面地址5. 远程桌面连接测试6. 设置固定远程地址7. 固定地址连接测试 前言 如今远程办公已经从一种选择变成了许多企业和个人的必修课,而如何在Linux系统上高效地访…...
uniapp+Vue3 开发小程序的下载文件功能
小程序下载文件,可以先预览文件内容,然后在手机上打开文件的工具中选择保存。 简单示例:(复制到HBuilder直接食用即可) <template><view class"container-detail"><view class"example…...
blazemeter工具使用--用于自动生成jmeter脚本并进行性能测试
1、安装blazemeter(网上有很多详情的教程) 2、开始录制:设置号你的文件名称后开始录制 3、录制完成后保存为jmeter(jmx)文件 4、在jmeter中打开文件 5、添加一个后置处理器:查看结果树,后运行看看能否成功…...
【实战ES】实战 Elasticsearch:快速上手与深度实践-7.2.2自动扩缩容策略(基于HPA)
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 7.2.2 基于HPA的Elasticsearch自动扩缩容深度实践1. 云原生时代弹性伸缩的核心价值1.1 业务负载特征分析1.2 传统扩缩容方式的局限性 2. HPA核心机制深度解析2.1 HPA工作原理…...
通义万相2.1:开启视频生成新时代
文章摘要:通义万相 2.1 是一款在人工智能视频生成领域具有里程碑意义的工具,它通过核心技术的升级和创新,为创作者提供了更强大、更智能的创作能力。本文详细介绍了通义万相 2.1 的背景、核心技术、功能特性、性能评测、用户反馈以及应用场景…...
如何用HTML5 Canvas实现电子签名功能✍️
🤖 作者简介:水煮白菜王,一位资深前端劝退师 👻 👀 文章专栏: 前端专栏 ,记录一下平时在博客写作中,总结出的一些开发技巧和知识归纳总结✍。 感谢支持💕💕&a…...
区块链中的数字签名:安全性与可信度的核心
数字签名是区块链技术的信任基石,它像区块链世界的身份证和防伪标签,确保每一笔交易的真实性、完整性和不可抵赖性。本文会用通俗的语言,带你彻底搞懂区块链中的数字签名! 文章目录 1. 数字签名是什么?从现实世界到区块…...
