当前位置: 首页 > news >正文

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集成成功,我们需要进行一系列的测试,包括但不限于:

  1. 用户认证流程是否正常。
  2. 访问令牌(Access Token)和刷新令牌(Refresh Token)是否正确生成和刷新。
  3. 资源服务是否能够正确验证访问令牌并返回数据。

通过本篇文章您能学到的知识点

  1. Spring Boot 3.x与OAuth 2.0集成的理解:您将了解如何在最新的Spring Boot版本中集成OAuth 2.0,这是现代应用程序中常见的认证授权机制。

  2. 服务端口配置:您将学会如何为认证授权服务、OAuth客户端服务和资源服务配置适当的端口,这是搭建微服务架构的基础。

  3. 依赖管理:您将掌握如何在pom.xml中添加和管理Spring Boot项目所需的依赖。

  4. 安全配置类编写:您将学习如何创建和配置Oauth2ServerAutoConfigurationOauth2ClientAutoConfigurationResourceServerAutoConfiguration等安全配置类。

  5. 启动类编写:您将了解如何编写Spring Boot应用的启动类,这是任何Spring Boot应用的核心。

  6. 配置文件编写:您将学会如何编写yml配置文件,这对于配置Spring Boot应用的行为至关重要。

  7. 控制器类编写:您将掌握如何创建OauthClientDemoControllerUserController等控制器类来处理HTTP请求。

  8. OAuth 2.0客户端和资源服务器配置:您将学习如何配置OAuth 2.0客户端和资源服务器,包括客户端注册、授权类型、重定向URI等。

  9. OpenID Connect集成:您将了解如何通过访问/.well-known/openid-configuration来获取OpenID Connect的配置信息,这是实现OpenID Connect认证的关键步骤。

  10. 错误处理和安全性:您将认识到在集成OAuth 2.0时需要注意的错误处理和安全性问题,这对于保护用户数据和系统安全至关重要。

  11. 实际应用场景理解:您将了解OAuth 2.0在实际项目中的应用场景,这有助于您在实际工作中更好地应用这些知识。

  12. 测试和验证:您将学习如何进行OAuth 2.0集成的测试和验证,确保认证授权流程的正确性和安全性。

通过本篇文章的学习,您将能够构建一个完整的OAuth 2.0认证授权体系,提升您在Spring Boot和安全领域的专业技能。

你掌握了那些或遇到那些问题,欢迎评论留言进行讨论!!!

相关文章:

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

Spring Boot 3.x OAuth 2.0&#xff1a;构建认证授权服务与资源服务器 前言 随着Spring Boot 3的发布&#xff0c;我们迎来了许多新特性和改进&#xff0c;其中包括对Spring Security和OAuth 2.0的更好支持。本文将详细介绍如何在Spring Boot 3.x版本中集成OAuth 2.0&#xf…...

2024年09月CCF-GESP编程能力等级认证Scratch图形化编程二级真题解析

本文收录于《Scratch等级认证CCF-GESP图形化真题解析》专栏,专栏总目录:点这里,订阅后可阅读专栏内所有文章。 一、单选题(共 10 题,每题 3 分,共 30 分) 第 1 题 据有关资料,山东大学于 1972 年研制成功 DJL-1 计算机,并于 1973 年投入运行,其综合性能居当时全国第…...

Linux 正则表达式(basic and extened)

正则表达式(Regular Expressions)&#xff0c;整理自&#xff1a; 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 学习笔记&#xff08;规避版权阉割版&#xff09; openstd.samr.gov.cn 国家标准全文公开系统 这个政府网站提供GB 35114-2017标准的的预览和下载&#xff0c;有需要的自行下载 GB 35114-2017作为一个国家强制标准&#xff0c;在国家标准全文公开系统 自己做个…...

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&#xff08;1&#xff09;匿名管道的原理&#xff08;2&#xff09;pipe函数…...

零基础上手WebGIS+智慧校园实例(1)【html by js】

请点个赞收藏关注支持一下博主喵&#xff01;&#xff01;&#xff01; 等下再更新一下1. WebGIS矢量图形的绘制&#xff08;超级详细&#xff01;&#xff01;&#xff09;&#xff0c;2. WebGIS计算距离&#xff0c; 以及智慧校园实例 with 3个例子&#xff01;&#xff01;…...

【Github】如何使用Git将本地项目上传到Github

【Github】如何使用Git将本地项目上传到Github 写在最前面1. 注册Github账号2. 安装Git工具配置用户名和邮箱仅为当前项目配置&#xff08;可选&#xff09; 3. 创建Github仓库4. 获取仓库地址5. 本地操作&#xff08;1&#xff09;进入项目文件夹&#xff08;2&#xff09;克隆…...

集合Queue、Deque、LinkedList、ArrayDeque、PriorityQueue详解

1、 Queue与Deque的区别 在研究java集合源码的时候&#xff0c;发现了一个很少用但是很有趣的点&#xff1a;Queue以及Deque&#xff1b; 平常在写leetcode经常用LinkedList向上转型Deque作为栈或者队列使用&#xff0c;但是一直都不知道Queue的作用&#xff0c;于是就直接官方…...

谈一下开源生态对 AI人工智能大模型的促进作用

谈一下开源生态对 AI人工智能大模型的促进作用 作者&#xff1a;开源呼叫中心系统 FreeIPCC&#xff0c;Github地址&#xff1a;https://github.com/lihaiya/freeipcc 开源生态对大模型的促进作用是一个多维度且深远的话题&#xff0c;它不仅加速了技术创新的速度&#xff0c;…...

基于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的关键技术–容错机制&#xff0c;用一些通俗的比喻来讲这个复杂的过程。参考自《离线和实时大数据开发实战》 需要先回顾昨天发的Flink关键概念 检查点&#xff08;checkpoint&#xff09; Flink容错机制的核心是分布式数据流和状态的快照&#xff0c;从而当分布…...

C++设计模式-策略模式-StrategyMethod

动机&#xff08;Motivation&#xff09; 在软件构建过程中&#xff0c;某些对象使用的算法可能多种多样&#xff0c;经常改变&#xff0c;如果将这些算法都编码到对象中&#xff0c;将会使对象变得异常复杂&#xff1b;而且有时候支持不使用的算法也是一个性能负担。 如何在运…...

小程序免备案:快速部署与优化的全攻略

小程序免备案为开发者提供了便捷高效的解决方案&#xff0c;省去繁琐的备案流程&#xff0c;同时通过优化网络性能和数据传输&#xff0c;保障用户体验。本文从部署策略、应用场景到技术实现&#xff0c;全面解析小程序免备案的核心优势。 小程序免备案&#xff1a;快速部署与优…...

Jmeter中的定时器

4&#xff09;定时器 1--固定定时器 功能特点 固定延迟&#xff1a;在每个请求之间添加固定的延迟时间。精确控制&#xff1a;可以精确控制请求的发送频率。简单易用&#xff1a;配置简单&#xff0c;易于理解和使用。 配置步骤 添加固定定时器 右键点击需要添加定时器的请求…...

C++自动化测试:GTest 与 GitLab CI/CD 的完美融合

在现代软件开发中&#xff0c;自动化测试是保证代码质量和稳定性的关键手段。对于C项目而言&#xff0c;自动化测试尤为重要&#xff0c;它能有效捕捉代码中的潜在缺陷&#xff0c;提高代码的可维护性和可靠性。本文将重点介绍如何在C项目中结合使用Google Test&#xff08;GTe…...

vscode连接远程开发机报错

远程开发机更新&#xff0c;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 架构的深度学习模型&#xff0c;专门用于时序数据的建模和预测。TST 是 Transformer 模型的一个变种&#xff0c;针对传统时序模型&#xff08;如 RNN、LSTM&#xff09;在处理长时间依赖、复杂数据关系时的限制而提出的…...

IDEA 2024安装指南(含安装包以及使用说明 cannot collect jvm options 问题 四)

汉化 setting 中选择插件 完成 安装出现问题 1.可能是因为之前下载过的idea&#xff0c;找到连接中 文件&#xff0c;卸载即可。...

Fakelocation Server服务器/专业版 Centos7

前言:需要Centos7系统 Fakelocation开源文件系统需求 Centos7 | Fakelocation | 任务一 更新Centos7 &#xff08;安装下载不再赘述&#xff09; sudo yum makecache fastsudo yum update -ysudo yum install -y kernelsudo reboot//如果遇到错误提示为 Another app is curre…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...