SpringBoot实战(三十五)微服务集成OAuth2.0(UAA)

news2025/3/11 18:33:21

目录

    • 一、知识回顾
      • 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 的主要功能如下:

  1. 用户管理:UAA 允许管理员创建、管理和删除用户账户。用户可以通过用户名和密码进行登录,也可以通过其他身份提供者(如 LDAP、SAML 等)进行身份验证。
  2. OAuth2.0支持:UAA 实现了 OAuth2 协议,允许应用程序通过 OAuth2 进行授权和认证。OAuth2 是一种广泛使用的授权框架,允许用户授权第三方应用访问其资源,而无需共享其凭据。
  3. OpenID Connect支持:UAA 还支持 OpenID Connect,这是一种基于 OAuth2 的身份验证协议,允许应用程序验证用户的身份并获取用户的基本信息。
  4. 多租户支持:UAA 支持多租户架构,允许不同的组织或团队在同一 UAA 实例中管理各自的用户和权限。
  5. 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 集成示例介绍

在示例项目中,包含两个核心服务:

  1. demo-eureka: 注册中心;
  2. demo-gateway: 网关中心;
  3. auth-server: 鉴权服务 – 相当于 “授权服务器”;
  4. **user-center: **用户服务 – 相当于 “资源服务器”。

包含五个基础启动包:

  1. common-spring-boot-starter: 基础公共包;
  2. jdbc-spring-boot-starter: JDBC数据库连接工具包;
  3. redis-spring-boot-starter: Redis缓存连接工具包;
  4. uaa-client-spring-boot-starter: “资源服务器” 工具包
  5. 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

整理完毕,完结撒花~🌻

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2313346.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DeepSeek进阶应用(一):结合Mermaid绘图(流程图、时序图、类图、状态图、甘特图、饼图)

🌟前言: 在软件开发、项目管理和系统设计等领域,图表是表达复杂信息的有效工具。随着AI助手如DeepSeek的普及,我们现在可以更轻松地创建各种专业图表。 名人说:博观而约取,厚积而薄发。——苏轼《稼说送张琥》 创作者&…

DeepSeek未来发展趋势:开创智能时代的新风口

DeepSeek未来发展趋势:开创智能时代的新风口 随着人工智能(AI)、深度学习(DL)和大数据的飞速发展,众多创新型技术已经逐渐走向成熟,而DeepSeek作为这一领域的新兴力量,正逐步吸引越…

从0开始的操作系统手搓教程24——完成我们的键盘驱动子系统

目录 所以,我们现来说说转义字符 我们需要如何处理扫描码 当键入的是双字符键时 当键入的是字母键时 下一篇 我们下面来看看我们的键盘驱动子系统是一个怎么个事情。 驱动程序,你可以认为是对硬件的一层封装。我们按照手册规格的规定姿势&#xff0…

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(); //转…

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建设框架与用户防护策略。通过理论分析与实操案…

RoboVQA:机器人多模态长范围推理

23 年 11 月来自 Google Deepmind 的论文“RoboVQA: Multimodal Long-Horizon Reasoning for Robotics”。 本文提出一种可扩展、自下而上且本质多样化的数据收集方案,该方案可用于长期和中期的高级推理,与传统的狭窄自上而下的逐步收集相比&#xff0c…

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 开发小程序的下载文件功能

小程序下载文件&#xff0c;可以先预览文件内容&#xff0c;然后在手机上打开文件的工具中选择保存。 简单示例&#xff1a;&#xff08;复制到HBuilder直接食用即可&#xff09; <template><view class"container-detail"><view class"example…

blazemeter工具使用--用于自动生成jmeter脚本并进行性能测试

1、安装blazemeter&#xff08;网上有很多详情的教程&#xff09; 2、开始录制&#xff1a;设置号你的文件名称后开始录制 3、录制完成后保存为jmeter(jmx)文件 4、在jmeter中打开文件 5、添加一个后置处理器&#xff1a;查看结果树&#xff0c;后运行看看能否成功&#xf…

通义万相2.1:开启视频生成新时代

文章摘要&#xff1a;通义万相 2.1 是一款在人工智能视频生成领域具有里程碑意义的工具&#xff0c;它通过核心技术的升级和创新&#xff0c;为创作者提供了更强大、更智能的创作能力。本文详细介绍了通义万相 2.1 的背景、核心技术、功能特性、性能评测、用户反馈以及应用场景…

如何用HTML5 Canvas实现电子签名功能✍️

&#x1f916; 作者简介&#xff1a;水煮白菜王&#xff0c;一位资深前端劝退师 &#x1f47b; &#x1f440; 文章专栏&#xff1a; 前端专栏 &#xff0c;记录一下平时在博客写作中&#xff0c;总结出的一些开发技巧和知识归纳总结✍。 感谢支持&#x1f495;&#x1f495;&a…

区块链中的数字签名:安全性与可信度的核心

数字签名是区块链技术的信任基石&#xff0c;它像区块链世界的身份证和防伪标签&#xff0c;确保每一笔交易的真实性、完整性和不可抵赖性。本文会用通俗的语言&#xff0c;带你彻底搞懂区块链中的数字签名&#xff01; 文章目录 1. 数字签名是什么&#xff1f;从现实世界到区块…

表格columns拼接两个后端返回的字段(以umi框架为例)

在用组件对前端项目进行开发时&#xff0c;我们会遇到以下情况&#xff1a;项目原型中有取值范围这个表字段&#xff0c;需要存放最小取值到最大取值。 而后端返回给我们的数据是返回了一个最小值和一个最大值&#xff0c; 在columns中我们需要对这两个字段进行拼接&#xff0…

sparkTTS window 安装

SparkTTS 的简介 Spark-TTS是一种基于SpardAudio团队提出的 BiCodec 构建的新系统&#xff0c;BiCodec 是一种单流语音编解码器&#xff0c;可将语音策略性地分解为两种互补的标记类型&#xff1a;用于语言内容的低比特率语义标记和用于说话者特定属性的固定长度全局标记。这种…