当前位置: 首页 > 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…...

oracle的静态注册和动态注册

oracle的静态注册和动态注册 静态注册&#xff1a; 静态注册 : 指将实例的相关信息手动告知 listener 侦 听 器 &#xff0c; 可以使用netmgr,netca,oem 以及直接 vi listener.ora 文件来实现静态注册&#xff0c;在动态注册不稳定时使用&#xff0c;特点是&#xff1a;稳定&…...

机器翻译基础与模型 之四:模型训练

1、开放词表 1.1 大词表和未登陆词问题 理想情况下&#xff0c;机器翻译应该是一个开放词表&#xff08;Open Vocabulary&#xff09;的翻译任务。也就是&#xff0c;无论测试数据中包含什么样的词&#xff0c;机器翻译系统都应该能够正常翻译。 现实的情况是即使不断扩充词…...

Vue——响应式数据,v-on,v-bind,v-if,v-for(内含项目实战)

目录 响应式数据 ref reactive 事件绑定指令 v-on v-on 鼠标监听事件 v-on 键盘监听事件 v-on 简写形式 属性动态化指令 v-bind iuput标签动态属性绑定 img标签动态属性绑定 b标签动态属性绑定 v-bind 简写形式 条件渲染指令 v-if 遍历指令 v-for 遍历对象的值 遍历…...

ceph 18.2.4二次开发,docker镜像制作

编译环境要求 #需要ubuntu 22.04版本 参考https://docs.ceph.com/en/reef/start/os-recommendations/ #磁盘空间最好大于200GB #内存如果小于100GB 会有OOM的情况发生,需要重跑 目前遇到内存占用最高为92GB替换阿里云ubuntu 22.04源 将下面内容写入/etc/apt/sources.list 文件…...

产品经理的项目管理课

各位产品经理&#xff0c;大家下午好&#xff0c;今天我给大家分享的主题是“产品经理如何做好项目管理”。 其实&#xff0c;我是不想分享这个主题的&#xff0c;是因为在周会中大家投票对这个议题最感兴趣&#xff0c;11个同学中有7个投了这个主题&#xff0c;所以才有了这次…...

Linux 下的 AWK 命令详细指南与示例

目录 简介AWK 的主要特性基本语法示例1. 打印文件的所有行2. 打印特定字段3. 打印匹配模式的行4. 基于条件过滤并打印5. 使用内置变量6. 执行算术运算7. 字符串操作8. 使用 BEGIN 和 END 块9. 处理分隔符文件 高级功能自定义脚本使用外部变量 总结 简介 AWK 是 Linux 中功能强…...

FPGA经验谈系列文章——8、复位的设计

前言 剑法往往有着固定的招式套路,而写代码似乎也存在类似的情况。不知从何时起,众多 FPGA 工程师们在编写代码时开启了一种关于 always 语句块的流行写法,那就是: always @(posedge i_clk or negedge i_rstn) 就笔者所经历的诸多项目以及所接触到的不少工程师而言,大家在…...

C#里怎么样实现操作符重载?

C#里怎么样实现操作符重载? 一般情况,都是表示某种类型的类时,才会使用到操作符重载。 比如实现一个复数类。 在C#中,重载运算符是通过在类或结构中定义特殊的方法来实现的,这些方法的名称是operator关键字后跟要重载的运算符。例如,要重载+运算符,可以定义一个名为op…...

项目实战:Vue3开发一个购物车

这段HTML代码实现了一个简单的购物车实战小项目的前端页面&#xff0c;结合了Vue.js框架来实现数据响应式和交互逻辑。页面展示了购物车中的商品项&#xff0c;每个商品项有增减数量的按钮&#xff0c;并且能显示商品总数以及目前固定为0元的商品总价和总价计算。 【运用响应式…...

Oracle SQL*Plus中的SET VERIFY

在 Oracle SQL*Plus 中&#xff0c;SET VERIFY ON 和 SET VERIFY OFF 是两个用于控制命令执行前后显示变量值的命令。这些命令主要用于调试和验证 SQL 脚本中的变量替换情况。 一、参数说明 1.1 SET VERIFY ON 作用&#xff1a;启用变量替换的验证功能。当启用时&#xff0c;S…...