- 博客(170)
- 资源 (3)
- 收藏
- 关注
原创 基于Spring Security 6的OAuth2 系列之二十五 -响应式编程之二
本章我们介绍了响应式编程实现资源服务器的搭建方式。至此,我们对Spring Security 6 实现OAuth2的全部内容就已经讲完了,下面还有最后一章,将以一个实际项目来结束。
2025-02-27 14:33:10
715
原创 基于Spring Security 6的OAuth2 系列之二十四 -响应式编程之一
响应式编程是一种编程范式,它允许程序组件以声明式的方式响应数据的变化。这种编程方式使得开发者能够更容易地构建复杂的异步数据流和事件驱动的应用程序。可能这么说对于理解这个很难,下面我通过一个示例,让你感受一下什么是响应式编程。如果你使用过java的Lambda编程方式,对于理解响应式编程就更容易一点。下面2段代码实现一样的效果,一个是使用java的Lambda表达式,一个是使用Project Reactor响应式编程框架,你先体会一下其编程风格,其实和java的Lambda表达式一样。
2025-02-26 16:21:07
624
原创 基于Spring Security 6的OAuth2 系列之二十三 - 高级特性--TLS客户端认证方法之二
本章我们介绍了如何使用证书对授权服务器的客户端进行认证。下一章,我们讲一种新的编程范式:响应式编程。在Spring Security中也采用了这种编程范式重新实现了一遍其框架,因此了解这一部分也很重要。
2025-02-26 16:20:28
893
原创 基于Spring Security 6的OAuth2 系列之二十二 - 高级特性--TLS客户端认证方法之一
到这里,我们已经通过Spring Security做了一次证书双向认证的过程。有了这一章为基础,那么对于OAuth2的授权服务器,其TLS客户端认证方式也是类似,下一章我们讲一下。
2025-02-25 15:53:45
992
原创 基于Spring Security 6的OAuth2 系列之二十一 - 高级特性--自定义授权模式
本次场景,我们来模拟自定义通过手机短信方式进行授权。代码参考lesson15子模块,这里只是模拟,我们假如已有手机号码:13888888888。并接收到的验证码:9999我们在上一章的《系列之二十 - 高级特性–令牌交换(Token Exchange)》或者前面的《系列之十七 - 高级特性–设备授权码模式》中的底层源码解析就已经知道,它们都可以认为是一种新的授权码模式,因此重写一种授权方式必须实现和,当然,你还要定义自己的。
2025-02-25 15:52:30
874
原创 基于Spring Security 6的OAuth2 系列之二十 - 高级特性--令牌交换(Token Exchange)
令牌交换(Token Exchange)来自于RFC8693协议。OAuth 2.0 Token Exchange 是标准 OAuth 2.0 协议的扩展。它使客户端应用程序能够从充当安全令牌服务(Security Token ServiceSTS) 的授权服务器请求和获取安全令牌(例如访问令牌)。STS 是一项服务,负责验证提供给它的令牌并在响应中颁发新令牌,这使客户端应用程序能够为分布式环境中的资源获取适当的安全令牌。
2025-02-20 09:11:58
910
原创 基于Spring Security 6的OAuth2 系列之十九 - 高级特性--OIDC1.0协议之二
我们发现在访问/userinfo接口时,只返回一个用户名,如果我们想返回更多的信息,应该如何操作呢?现在我们知道其通过id_token里面的信息取获取的。第一种方法:自定义id_token,将信息放入id_token中,我们需要自定义OAuth2TokenGenerator。或许你存一些无关紧要的信息还是可以接受的,但是如果信息中包括个人隐私以及系统权限等信息,就会使得id_token暴露太多信息。如果想实现这个,参考官方的案例。
2025-02-18 16:53:36
888
原创 基于Spring Security 6的OAuth2 系列之十八 - 高级特性--OIDC1.0协议之一
本章简介了OIDC1.0协议,并使用Spring Security演示了一遍OIDC1.0协议的实现。下章我们将去窥探其原理。
2025-02-18 16:53:05
1111
原创 基于Spring Security 6的OAuth2 系列之十七 - 高级特性--设备授权码模式
本章我们对设备授权码模式进行了详细的讲解。下一章我们继续讲解OAuth2的新特性。
2025-02-17 09:19:44
1049
原创 基于Spring Security 6的OAuth2 系列之十六 - 高级特性--PKCE
本章我们了解了none情况下的认证模式,可以通过PKCE进行增强。其实PKCE不止是none认证方式,所有认证方式下都可以加入PKCE,但是PKCE只能用于授权码模式,不能用于客户端模式。下一章,我们将继续OAuth2.1未讲解的一个关键更新:设备授权码模式。
2025-02-17 09:18:28
1153
1
原创 基于Spring Security 6的OAuth2 系列之十五 - 高级特性--客户端认证方式
本章讲了授权服务器对客户端认证的几种不同方式及其原理,并使用代码演示一遍。下一章我们继续讲述这一部分内容,也就是none方式的客户端认证,但是会有一个新的扩展-PKCE扩展,这是OAuth2.1版本才有的,说明Spring Security 6 还是走在比较前面。
2025-02-12 09:10:16
1156
原创 基于Spring Security 6的OAuth2 系列之十四 - 资源服务器--自定义资源服务器
处理认证失败的异常:处理没有权限或者没有登录的异常我们从上一章知道资源服务器会去授权服务器请求得到JWT的公钥,或者配置某一个地方获取公钥。这里还有一种办法,就是本地公钥,可以通过自定义decoder方式,获取本地公钥,这样就可以不依赖其它服务。代码参考lesson08子模块1)新建lesson08子模块,复制和lesson07子模块一致2)在SecurityConfig配置下,配置自己加载本地的公钥@Beanhttp// userInfo接口需要SCOPE_profile权限。
2025-02-11 13:15:50
950
原创 基于Spring Security 6的OAuth2 系列之十二 - 资源服务器--开篇
资源服务器是如何验证你的token呢?从官方文档上面看,默认会根据你配置的授权服务器地址,去读取以下3个接口:从其中获得jwtURL地址,然后通过该地址去获取token的验证密钥(关于资源服务器底层原理这部分我们在《系列之十三 - 资源服务器–底层原理》中再来了解)。这里我们先来看看,有时候因为安全性问题,授权服务器不会开启这些接口,因此需要我们自己提供一个接口给资源服务器获取Jwks,这个在官方文档中的jwk-set-uri配置可以自定义获取Jwks接口,下面我们就模拟这个过程。
2025-02-10 09:02:40
927
原创 基于Spring Security 6的OAuth2 系列之十一 - 授权服务器--前后端分离授权服务器
至此,我们演示了一个前后端分离的授权服务器的。到目前为止,我们关于授权服务器的使用就告一段落,当然还有很多功能没有讲,这个在后面的系列会逐一讲解,下一章我们来看看资源服务器。
2025-02-10 09:02:04
904
3
原创 基于Spring Security 6的OAuth2 系列之十 - 授权服务器--刷新token
本章我们讲解了刷新token的方式以及原理。到目前为止,我们已经对Spring Security实现的授权服务器有了比较深入的了解。下面我们将结合Spring Security,实现一个生产可用的前后端分离的授权服务器。
2025-02-03 15:05:58
1255
原创 基于Spring Security 6的OAuth2 系列之九 - 授权服务器--token的获取
我们从源码OAuth2AuthorizationServerJwtAutoConfiguration可以看到默认情况下是自动生成一个RSA非对称的加密,如下图:安全问题:我们知道密钥是经常需要轮换的,如果使用默认我们就无法定时轮换,当然重新启动就能切换集群问题:如果我们的授权服务器是一个集群,那么每个服务器的密钥都是不一样,无法实现集群效果因此我们只需要自定义jwkSource,就可以自己使用自己生成的RSA密钥。代码参考lesson05子模块。
2025-02-03 15:05:20
1192
原创 基于Spring Security 6的OAuth2 系列之八 - 授权服务器--Spring Authrization Server的基本原理
本章我们对Spring Authrization Server如何实现授权码模式以及自定义客户端信息进行源码解析,并了解了几个关键的Filter过滤器。有了这个基础,对接下来我们实现更为高级的授权服务器功能,并了解实现原理就变得更为容易。
2025-01-31 15:09:39
1438
原创 基于Spring Security 6的OAuth2 系列之七 - 授权服务器--自定义数据库客户端信息
之所以想写这一系列,是因为之前工作过程中使用Spring Security OAuth2搭建了网关和授权服务器,但当时基于spring-boot 2.3.x,其默认的Spring Security是5.3.x。之后新项目升级到了spring-boot 3.3.0,结果一看Spring Security也升级为6.3.0。无论是Spring Security的风格和以及OAuth2都做了较大改动,里面甚至将授权服务器模块都移除了,导致在配置同样功能时,花费了些时间研究新版本的底层原理,这里将一些学习经验分享给
2025-01-31 15:08:21
1534
原创 基于Spring Security 6的OAuth2 系列之六 - 授权服务器--自定义授权页面
之所以想写这一系列,是因为之前工作过程中使用Spring Security OAuth2搭建了网关和授权服务器,但当时基于spring-boot 2.3.x,其默认的Spring Security是5.3.x。之后新项目升级到了spring-boot 3.3.0,结果一看Spring Security也升级为6.3.0。无论是Spring Security的风格和以及OAuth2都做了较大改动,里面甚至将授权服务器模块都移除了,导致在配置同样功能时,花费了些时间研究新版本的底层原理,这里将一些学习经验分享给
2025-01-23 13:20:18
1066
原创 基于Spring Security 6的OAuth2 系列之五 - 授权服务器--开篇
代码参考lesson02子模块,其中该子模块有2个子模块,分别是:oauth-server和oauth-client,他们分别代表oauth的授权服务器和oauth的客户端。
2025-01-23 13:19:03
1001
原创 基于Spring Security 6的OAuth2 系列之四 - 客户端--oauth2-client底层原理
本章我们从底层原理分析了Spring Security默认配置OAuth2客户端的原理。至此我们对OAuth2的流程和模式都有了比较深入的了解,但是到目前为止,我们使用的是第三方的gitee的授权服务器,那么如果我们自己实现一个授权服务器,该如何做呢?那么接下来几章,将会揭晓授权服务器。
2025-01-22 11:19:48
1054
原创 基于Spring Security 6的OAuth2 系列之三 - 客户端--基于Spring Security演示授权码模式
到这里,我们已经通过Spring Security 6的oauth2-client完成了我们在系列2中手动实现的授权码模式获得用户信息的流程。下面我们将会从源代码的方式解析oauth2-client是如何完成这一过程。
2025-01-22 11:15:40
1003
原创 基于Spring Security 6的OAuth2 系列之二 - 客户端--非代码演示授权码模式
至此,我们就使用浏览器+postman工具演示了通过授权码模式去获取Gitee的用户信息。这过程中,我们只是遵循OAuth2的流程,就能够实现授权方法。那么接下来,我们采用代码方式来实现这个流程。
2025-01-21 10:46:28
1154
原创 基于Spring Security 6的OAuth2 系列之一 - 开篇入门
这一章我们基本上对OAuth2做什么的做了基本了解,同时还了解了其关键角色以及模式,这两部分都是非常重要的,因为后面编程都需要理清楚你是什么角色,以及采用哪种模式。我们接下来会通过客户端、授权服务器以及资源服务器三个方面讲述整个Spring Security实现OAuth的过程。下面3章主要是从一个Client客户端角色,使用授权码模式,让github给我们授权并访问github获得用户信息,并讲解Spring Security的oauth2-client组件底层原理。
2025-01-21 10:35:42
895
2
原创 Spring Security 6 系列之十二 - 最后终章
我们通过12章的系列,从底层原理讲到实际应用。基本上揽括了Spring Security 6的功能,当然还有许多功能没有谈到,比如CRSF 、Remember me、密码升级等等,我相信学习完这一系列后,你如果有兴趣了解Spring Security的其它功能,对你来说应该易如反掌。另外现在内部微服务做统一登录认证,都会使用网关+OAuth2方式,这部分我们将会单独开一个系列来讲解。
2024-12-30 14:03:37
813
原创 Spring Security 6 系列之十一 - 白名单和跨域处理
了解跨域请求之前,我们先了解什么是同源策略。同源策略(Same-Origin Policy)是一种安全机制,它限制一个文档或脚本只能读取来自同一源的信息。这里的“源”由协议、域名和端口组成。如果一个请求的目标地址与当前文档的源不相同,则该请求被视为跨域请求。简单来说就是如果同一个网页里面,请求来自2个不同的源(协议、域名或端口有一个不一致)的话,则会出现跨域问题,会报出一个cors的错误,这是其实是为了保证一种安全的机制,防止恶意网站访问用户的敏感信息或执行不安全的操作。
2024-12-30 14:01:49
1196
原创 Spring Security 6 系列之十 - 自定义认证方式(手机短信验证码)
我们要自定义AuthenticationToken、AuthenticationProvider、AuthenticationFilter三个类,并模拟账号密码认证方式对手机验证码进行认证。
2024-12-26 15:13:16
955
原创 Spring Security 6 系列之九 - 集成JWT
1)不清楚的可以回顾lesson03子模块,这里做了一些小改动2) 在entity包下新增LoginUserDetails类,自定义类为了能够Redis序列化,之前使用Security默认的User,在Redis反序列化会报错@Data@Override@Override@Override@Override@Override@Override@Override3)定义entity包下的TUser和对应mapper包下的TUserMapper@Data。
2024-12-26 15:12:20
1407
原创 Spring Security 6 系列之八 - 前后端分离
我们现在通过自定义方式实现了真正的前后端分离,但是项目还是基于Session方式,那么下一章我们会更贴近实际,使用JWT,将结合Redis、JWT、异常处理,实现一个前后端分离的完整示例。
2024-12-23 18:01:14
979
原创 Spring Security 6 系列之七 - 自定义异常管理
本章我们了解了Spring Security常见的一些异常,以及异常处理机制并自定义异常的返回。之所以要做自定义异常以Json方式返回,往往是因为前后端分离的架构,前后端一般都会约定返回Json数据格式。那么下一章,我们看看Spring Security如何做前后端分离。
2024-12-23 18:00:19
1165
原创 Spring Security 6 系列之六 - 会话管理(Session)
我们在本章中了解到Spring Security的Session,并使用Redis实现Session共享。在实际业务中,Session是一种有状态登录,也就是服务器其实会存储Session信息。而现在很多项目都是使用Restful风格的微服务,Restful风格其实强调的是服务的无状态性、前后端分离。因此接下来我们开始了解Spring Security 做前后端分离的一些操作,下一章先从异常处理开始。
2024-12-19 14:19:17
1206
原创 Spring Security 6 系列之五 - 授权管理
我们在本章中了解了授权(访问控制)的原理以及一些基本权限模型,这样我们就已经基本了解Spring Security的认证和授权两大重要模块。接下来我们可能会更深入或者说跟贴近实践使用Spring Security的功能,下一章我们从Session会话管理开始。
2024-12-19 14:18:21
829
原创 Spring Security 6 系列之四 - 自定义配置和自定义登录界面
如果需要自定义配置,你只需要定义一个类,注解为@Configuration(Spring Security5之后连同@EnableWebSecurity注解都不需要),并定义一个SecurityFilterChain securityFilterChain(HttpSecurity http)返回,就会默认替换掉原先的里面的配置,我们可以参考写一个默认配置。
2024-12-18 08:50:09
1113
原创 Spring Security 6 系列之三 - Filter过滤器
关于Spring Security的底层原理大概讲这么多。Spring Security的过滤器有那么多,我们这里主要讲的是几个经常使用到的,其它的过滤器后续遇到需要自定义配置的时候,我们再讲解。Spring Security默认配置显然不能符合一个真正的业务需求,那么下一章我们就要开始做各种自定义配置。
2024-12-18 08:48:56
1436
原创 Spring Security 6 系列之二 - 基于数据库的用户认证和认证原理
前提条件:基于mysql数据库创建一个数据库,名为spring_security_study,创建用户表t_user下面开始说明基于自定义数据库的用户配置代码参考lesson03子模块1)新建子模块lesson03,其pom引入以下依赖:(引入mybatis-plus、mysql-connector、druid连接池、lombok)
2024-12-16 17:03:31
1448
2
原创 Spring Security 6 系列之一 - 开篇入门
我们可以通过配置application.yml文件,为Spring Security配置默认用户名和密码,这样就不会使用默认user和随机密码server:port: 8080spring:security:user:name: moo结语:问题来了,即使通过这种配置自定义账号密码,在业务上面来说,也不会有人将用户名和密码放到配置文件中,一般都会放到数据库中。那么Spring Security也考虑到这种情况,下一章我们来讲解:Spring Security基于数据库的用户认证和认证原理。
2024-12-16 17:02:43
1313
1
原创 java脚手架系列16-AI大模型集成
Data@Autowiredpublic String generate(@RequestParam(value = "message", defaultValue = "你是谁?.build();.build();.build();
2024-11-25 13:44:29
1059
原创 java脚手架系列15-分库分表(ShardingSphere)
之所以想写这一系列,是因为之前工作过程中有几次项目是从零开始搭建的,而且项目涉及的内容还不少。在这过程中,遇到了很多棘手的非业务问题,在不断实践过程中慢慢积累出一些基本的实践经验,认为这些与业务无关的基本的实践经验其实可以复刻到其它项目上,在行业内可能称为脚手架,因此决定将此java基础脚手架的搭建总结下来,分享给大家使用。
2024-11-25 13:43:34
847
原创 java脚手架系列14-定时任务
所需的功能核心功能:定时调度、任务管理、可观测日志高可用:集群、分片、失败处理高性能:分布式锁扩展功能:可视化运维、多语言、任务编排整体架构一个分布式定时任务调度框架一般分为3个模块:调度中心:负责接收并分配任务,任务调度,核心调度模块。任务执行:负责执行任务,执行完反馈给调度中心。监控中心:主要负责节点管理,任务队列管理,监控管理等。关于开源的分布式定任务框架,这里就不累述了,大家可以参照我这篇文章《分布式定时任务调度框架》
2024-11-01 16:56:28
630
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人