Spring Boot 3.x + OAuth 2.0:构建认证授权服务与资源服务器
Spring Boot 3.x + OAuth 2.0:构建认证授权服务与资源服务器

前言
随着Spring Boot 3的发布,我们迎来了许多新特性和改进,其中包括对Spring Security和OAuth 2.0的更好支持。本文将详细介绍如何在Spring Boot 3.x版本中集成OAuth 2.0,快速开发认证授权服务、OAuth客户端以及资源服务。
开发环境介绍
在开始之前,我们需要准备三个服务,分别对应认证授权服务、OAuth客户端以及资源服务。以下是这些服务的端口配置:
| 服务 | 端口 |
|---|---|
| 认证授权服务 | 8080 |
| OAuth客户端服务 | 8081 |
| 资源服务 | 8082 |
认证授权服务

pom.xml依赖
首先,我们需要在pom.xml文件中添加以下依赖:
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-oauth2-authorization-server</artifactId><version>${spring-security-oauth2-authorization-server.version}</version></dependency>
</dependencies>
Oauth2ServerAutoConfiguration类
接下来,我们创建Oauth2ServerAutoConfiguration类来配置认证授权服务:
@Configuration
public class Oauth2ServerAutoConfiguration {@Beanpublic SecurityFilterChain authorizationServerSecurityFilterChain(HttpSecurity http) throws Exception {OAuth2AuthorizationServerConfiguration.applyDefaultSecurity(http);http.getConfigurer(OAuth2AuthorizationServerConfigurer.class).oidc(Customizer.withDefaults()); // Enable OpenID Connect 1.0// 其他配置省略...return http.build();}// 其他Bean定义省略...
}
main函数
认证授权服务的启动类如下:
@SpringBootApplication
public class OauthServerApplication {public static void main(String[] args) {SpringApplication.run(OauthServerApplication.class, args);}
}
yml配置
最后,我们需要在yml配置文件中设置服务端口:
server:port: 8080
第三方应用OAuth客户端
pom.xml依赖
在pom.xml文件中添加以下依赖:
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-oauth2-client</artifactId></dependency>
</dependencies>
Oauth2ClientAutoConfiguration类
创建Oauth2ClientAutoConfiguration类来配置OAuth客户端:
@Configuration
public class Oauth2ClientAutoConfiguration {@Beanpublic SecurityFilterChain authorizationClientSecurityFilterChain(HttpSecurity http) throws Exception {http.authorizeRequests().anyRequest().authenticated().and().oauth2Client();// 其他配置省略...return http.build();}
}
OauthClientDemoController类
创建OauthClientDemoController类来处理客户端请求:
@RestController
public class OauthClientDemoController {@RequestMapping(path = "/hello")public String demo() {return "Hello, OAuth Client!";}
}
main函数
OAuth客户端服务的启动类如下:
@SpringBootApplication
public class OauthClientApplication {public static void main(String[] args) {SpringApplication.run(OauthClientApplication.class, args);}
}
yml配置
在yml配置文件中设置服务端口和OAuth2客户端配置:
server:port: 8081servlet:session:cookie:name: JSESSIONID-2spring:security:oauth2:client:registration:client-id-1:provider: demo-providerclient-id: demo-client-idclient-secret: demo-client-secretscope: user_info, pull_requestsauthorization-grant-type: authorization_coderedirect-uri: '{baseUrl}/{action}/oauth2/code/{registrationId}'
资源服务
pom.xml依赖
在pom.xml文件中添加以下依赖:
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-oauth2-resource-server</artifactId></dependency>
</dependencies>
ResourceServerAutoConfiguration类
创建ResourceServerAutoConfiguration类来配置资源服务:
@Configuration
public class ResourceServerAutoConfiguration {@Beanpublic SecurityFilterChain resourceServerSecurityFilterChain(HttpSecurity http) throws Exception {http.authorizeRequests().anyRequest().authenticated().and().oauth2ResourceServer().jwt();return http.build();}
}
UserController类
创建UserController类来处理用户信息请求:
@RestController
public class UserController {@RequestMapping(path = "/user/info", produces = MediaType.APPLICATION_JSON_VALUE)public Map<String, Object> getUser() {Map<String, Object> map = new HashMap<>();map.put("name", "Kimi");return map;}
}
main函数
资源服务的启动类如下:
@SpringBootApplication
public class ResourceServerApplication {public static void main(String[] args) {SpringApplication.run(ResourceServerApplication.class, args);}
}
yml配置
在yml配置文件中设置服务端口和资源服务配置:
server:port: 8082spring:security:oauth2:resourceserver:jwt:jwk-set-uri: http://127.0.0.1:8080/oauth2/jwks
OAuth客户端openid演示
通过访问http://127.0.0.1:8080/.well-known/openid-configuration,我们可以获取OpenID Connect的配置信息。
错误处理和安全性
在集成OAuth 2.0时,我们需要特别注意错误处理和安全性问题。确保所有的通信都是通过HTTPS进行,以保护用户的认证信息不被截获。同时,合理配置客户端的权限和范围,避免过度授权。
实际应用场景
OAuth 2.0在实际项目中的应用非常广泛,例如用户登录、API访问控制等。通过集成OAuth 2.0,我们可以为用户提供安全、便捷的认证服务。
测试和验证
为了确保OAuth 2.0集成成功,我们需要进行一系列的测试,包括但不限于:
- 用户认证流程是否正常。
- 访问令牌(Access Token)和刷新令牌(Refresh Token)是否正确生成和刷新。
- 资源服务是否能够正确验证访问令牌并返回数据。
通过本篇文章您能学到的知识点
-
Spring Boot 3.x与OAuth 2.0集成的理解:您将了解如何在最新的Spring Boot版本中集成OAuth 2.0,这是现代应用程序中常见的认证授权机制。
-
服务端口配置:您将学会如何为认证授权服务、OAuth客户端服务和资源服务配置适当的端口,这是搭建微服务架构的基础。
-
依赖管理:您将掌握如何在
pom.xml中添加和管理Spring Boot项目所需的依赖。 -
安全配置类编写:您将学习如何创建和配置
Oauth2ServerAutoConfiguration、Oauth2ClientAutoConfiguration和ResourceServerAutoConfiguration等安全配置类。 -
启动类编写:您将了解如何编写Spring Boot应用的启动类,这是任何Spring Boot应用的核心。
-
配置文件编写:您将学会如何编写
yml配置文件,这对于配置Spring Boot应用的行为至关重要。 -
控制器类编写:您将掌握如何创建
OauthClientDemoController和UserController等控制器类来处理HTTP请求。 -
OAuth 2.0客户端和资源服务器配置:您将学习如何配置OAuth 2.0客户端和资源服务器,包括客户端注册、授权类型、重定向URI等。
-
OpenID Connect集成:您将了解如何通过访问
/.well-known/openid-configuration来获取OpenID Connect的配置信息,这是实现OpenID Connect认证的关键步骤。 -
错误处理和安全性:您将认识到在集成OAuth 2.0时需要注意的错误处理和安全性问题,这对于保护用户数据和系统安全至关重要。
-
实际应用场景理解:您将了解OAuth 2.0在实际项目中的应用场景,这有助于您在实际工作中更好地应用这些知识。
-
测试和验证:您将学习如何进行OAuth 2.0集成的测试和验证,确保认证授权流程的正确性和安全性。
通过本篇文章的学习,您将能够构建一个完整的OAuth 2.0认证授权体系,提升您在Spring Boot和安全领域的专业技能。
你掌握了那些或遇到那些问题,欢迎评论留言进行讨论!!!
相关文章:
Spring Boot 3.x + OAuth 2.0:构建认证授权服务与资源服务器
Spring Boot 3.x OAuth 2.0:构建认证授权服务与资源服务器 前言 随着Spring Boot 3的发布,我们迎来了许多新特性和改进,其中包括对Spring Security和OAuth 2.0的更好支持。本文将详细介绍如何在Spring Boot 3.x版本中集成OAuth 2.0…...
2024年09月CCF-GESP编程能力等级认证Scratch图形化编程二级真题解析
本文收录于《Scratch等级认证CCF-GESP图形化真题解析》专栏,专栏总目录:点这里,订阅后可阅读专栏内所有文章。 一、单选题(共 10 题,每题 3 分,共 30 分) 第 1 题 据有关资料,山东大学于 1972 年研制成功 DJL-1 计算机,并于 1973 年投入运行,其综合性能居当时全国第…...
Linux 正则表达式(basic and extened)
正则表达式(Regular Expressions),整理自: https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html gred sed 定义 Regular Expressions (REs) provide a mechanism to select specific strings from a set of character strings.…...
GB 35114-2017 学习笔记(规避版权阉割版)
GB 35114-2017 学习笔记(规避版权阉割版) openstd.samr.gov.cn 国家标准全文公开系统 这个政府网站提供GB 35114-2017标准的的预览和下载,有需要的自行下载 GB 35114-2017作为一个国家强制标准,在国家标准全文公开系统 自己做个…...
YOLO-FaceV2: A Scale and Occlusion Aware Face Detector
《YOLO-FaceV2:一种尺度与遮挡感知的人脸检测器》 1.引言2.相关工作3.YOLO-FaceV23.1网络结构3.2尺度感知RFE模型3.3遮挡感知排斥损失3.4遮挡感知注意力网络3.5样本加权函数3.6Anchor设计策略3.7 归一化高斯Wasserstein距离 4.实验4.1 数据集4.2 训练4.3 消融实验4.3.1 SEAM块4…...
进程间通信--详解
目录 前言一、进程间通信介绍1、进程间通信目的2、进程间通信发展3、进程间通信的分类4、进程间通信的必要性5、进程间通信的技术背景6、进程间通信的本质理解 二、管道1、什么是管道2、匿名管道pipe(1)匿名管道的原理(2)pipe函数…...
零基础上手WebGIS+智慧校园实例(1)【html by js】
请点个赞收藏关注支持一下博主喵!!! 等下再更新一下1. WebGIS矢量图形的绘制(超级详细!!),2. WebGIS计算距离, 以及智慧校园实例 with 3个例子!!…...
【Github】如何使用Git将本地项目上传到Github
【Github】如何使用Git将本地项目上传到Github 写在最前面1. 注册Github账号2. 安装Git工具配置用户名和邮箱仅为当前项目配置(可选) 3. 创建Github仓库4. 获取仓库地址5. 本地操作(1)进入项目文件夹(2)克隆…...
集合Queue、Deque、LinkedList、ArrayDeque、PriorityQueue详解
1、 Queue与Deque的区别 在研究java集合源码的时候,发现了一个很少用但是很有趣的点:Queue以及Deque; 平常在写leetcode经常用LinkedList向上转型Deque作为栈或者队列使用,但是一直都不知道Queue的作用,于是就直接官方…...
谈一下开源生态对 AI人工智能大模型的促进作用
谈一下开源生态对 AI人工智能大模型的促进作用 作者:开源呼叫中心系统 FreeIPCC,Github地址:https://github.com/lihaiya/freeipcc 开源生态对大模型的促进作用是一个多维度且深远的话题,它不仅加速了技术创新的速度,…...
基于python的机器学习(四)—— 聚类(一)
目录 一、聚类的原理与实现 1.1 聚类的概念和类型 1.2 如何度量距离 1.2.1 数据的类型 1.2.2 连续型数据的距离度量方法 1.2.3 离散型数据的距离度量方法 1.3 聚类的基本步骤 二、层次聚类算法 2.1 算法原理和实例 2.2 算法的Sklearn实现 2.2.1 层次聚类法的可视化实…...
实时数据开发 | 怎么通俗理解Flink容错机制,提到的checkpoint、barrier、Savepoint、sink都是什么
今天学Flink的关键技术–容错机制,用一些通俗的比喻来讲这个复杂的过程。参考自《离线和实时大数据开发实战》 需要先回顾昨天发的Flink关键概念 检查点(checkpoint) Flink容错机制的核心是分布式数据流和状态的快照,从而当分布…...
C++设计模式-策略模式-StrategyMethod
动机(Motivation) 在软件构建过程中,某些对象使用的算法可能多种多样,经常改变,如果将这些算法都编码到对象中,将会使对象变得异常复杂;而且有时候支持不使用的算法也是一个性能负担。 如何在运…...
小程序免备案:快速部署与优化的全攻略
小程序免备案为开发者提供了便捷高效的解决方案,省去繁琐的备案流程,同时通过优化网络性能和数据传输,保障用户体验。本文从部署策略、应用场景到技术实现,全面解析小程序免备案的核心优势。 小程序免备案:快速部署与优…...
Jmeter中的定时器
4)定时器 1--固定定时器 功能特点 固定延迟:在每个请求之间添加固定的延迟时间。精确控制:可以精确控制请求的发送频率。简单易用:配置简单,易于理解和使用。 配置步骤 添加固定定时器 右键点击需要添加定时器的请求…...
C++自动化测试:GTest 与 GitLab CI/CD 的完美融合
在现代软件开发中,自动化测试是保证代码质量和稳定性的关键手段。对于C项目而言,自动化测试尤为重要,它能有效捕捉代码中的潜在缺陷,提高代码的可维护性和可靠性。本文将重点介绍如何在C项目中结合使用Google Test(GTe…...
vscode连接远程开发机报错
远程开发机更新,vscode连接失败 报错信息 "install" terminal command done Install terminal quit with output: Host key verification failed. Received install output: Host key verification failed. Failed to parse remote port from server ou…...
神经网络12-Time-Series Transformer (TST)模型
Time-Series Transformer (TST) 是一种基于 Transformer 架构的深度学习模型,专门用于时序数据的建模和预测。TST 是 Transformer 模型的一个变种,针对传统时序模型(如 RNN、LSTM)在处理长时间依赖、复杂数据关系时的限制而提出的…...
IDEA 2024安装指南(含安装包以及使用说明 cannot collect jvm options 问题 四)
汉化 setting 中选择插件 完成 安装出现问题 1.可能是因为之前下载过的idea,找到连接中 文件,卸载即可。...
Fakelocation Server服务器/专业版 Centos7
前言:需要Centos7系统 Fakelocation开源文件系统需求 Centos7 | Fakelocation | 任务一 更新Centos7 (安装下载不再赘述) sudo yum makecache fastsudo yum update -ysudo yum install -y kernelsudo reboot//如果遇到错误提示为 Another app is curre…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...
无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...
