如何实现Spring框架下的OAuth2.0认证新方案?

2026-05-05 17:511阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计769个文字,预计阅读时间需要4分钟。

如何实现Spring框架下的OAuth2.0认证新方案?

以下是对原文的简化

Spring Authorization Server(SAS)简要概述:SAS是Spring团队正式宣布的Spring Security OAuth替代品,旨在停止维护。项目不再进行任何的迭代。目前,Spring生态中的OAuth2授权服务器是Spring Authorization Server。

以下全文 Spring Authorization Server 简称为: SAS

背景
  • Spring 团队正式宣布 Spring Security OAuth 停止维护,该项目将不会再进行任何的迭代

  • 目前 Spring 生态中的 OAuth2 授权服务器是 Spring Authorization Server 已经可以正式生产使用
  • 作为 SpringBoot 3.0 的过渡版本 SpringBoot 2.7.0 过期了大量关于 SpringSecurity 的配置类,如沿用旧版本过期配置无法向上升级。
迁移过程

本文以PIG 微服务开发平台为演示,适用于 Spring Security OAuth 2.3 <-> 2.5 的认证中心迁移

如何实现Spring框架下的OAuth2.0认证新方案?

① Java 1.8 支持

目前最新的 SAS 0.3 基于 Java 11 构建,低版本 Java 无法使用

经过和 Spring Security 官方团队的沟通 0.3.1 将继续兼容 Java 1.8

我们联合 springboot 中文社区编译了适配 java 1.8 的版本坐标如下

<dependency> <groupId>io.springboot.security</groupId> <artifactId>spring-security-oauth2-authorization-server</artifactId> <version>0.3.0</version> </dependency> ② 授权模式扩展

  • 扩展支持密码模式,SAS 基于 oauth 2.1 协议不支持密码模式

  • 扩展支持短信登录

③ Redis 令牌存储

  • 官方目前没有提供基于 Redis 令牌持久化方案

  • PIG 扩展 PigRedisOAuth2AuthorizationService 支持

④ Token 输出格式化
  • 使用自省令牌的情况下 默认实现为

ku4R4n7YD1f584KXj4k_3GP9o-HbdY-PDIIh-twPVJTmvHa5mLIoifaNhbBvFNBbse6_wAMcRoOWuVs9qeBWpxQ5zIFrF1A4g1Q7LhVAfH1vo9Uc7WL3SP3u82j0XU5x

  • 为方便结合 redis 高效检索 token ,结合 RDM 分组也可以更方便的图形化观察

统一前缀::令牌类型::客户端ID::用户名::uuid

@Bean public OAuth2TokenGenerator oAuth2TokenGenerator() { CustomeOAuth2AccessTokenGenerator accessTokenGenerator = new CustomeOAuth2AccessTokenGenerator(); // 注入Token 增加关联用户信息 accessTokenGenerator.setAccessTokenCustomizer(new CustomeOAuth2TokenCustomizer()); return new DelegatingOAuth2TokenGenerator(accessTokenGenerator, new OAuth2RefreshTokenGenerator()); } ⑤ Token 输出增强

  • 使用自省令牌,默认情况下输出的 Token 格式

{ "access_token": "xx", "refresh_token": "xx", "scope": "server", "token_type": "Bearer", "expires_in": 43199 }

  • Token 增强输出关联用户信息

{ "sub": "admin", "clientId": "test", "access_token": "xx", "refresh_token": "xx", "license": "pig4cloud.com", "user_info": { "username": "admin", "accountNonExpired": true, "accountNonLocked": true, "credentialsNonExpired": true, "enabled": true, "id": 1, "deptId": 1, "phone": "17034642999", "name": "admin", "attributes": {} } } ⑥ 授权码模式个性化

⑦ 资源服务器
  • 自省方案扩展支持资源资源服务器本地查询

  • 扩展资源服务器本地自省

- 优势: 1. 用户状态实时更新 2. 减少网络调用提升性能

  • 源码: github.com/pig-mesh/pig

本文共计769个文字,预计阅读时间需要4分钟。

如何实现Spring框架下的OAuth2.0认证新方案?

以下是对原文的简化

Spring Authorization Server(SAS)简要概述:SAS是Spring团队正式宣布的Spring Security OAuth替代品,旨在停止维护。项目不再进行任何的迭代。目前,Spring生态中的OAuth2授权服务器是Spring Authorization Server。

以下全文 Spring Authorization Server 简称为: SAS

背景
  • Spring 团队正式宣布 Spring Security OAuth 停止维护,该项目将不会再进行任何的迭代

  • 目前 Spring 生态中的 OAuth2 授权服务器是 Spring Authorization Server 已经可以正式生产使用
  • 作为 SpringBoot 3.0 的过渡版本 SpringBoot 2.7.0 过期了大量关于 SpringSecurity 的配置类,如沿用旧版本过期配置无法向上升级。
迁移过程

本文以PIG 微服务开发平台为演示,适用于 Spring Security OAuth 2.3 <-> 2.5 的认证中心迁移

如何实现Spring框架下的OAuth2.0认证新方案?

① Java 1.8 支持

目前最新的 SAS 0.3 基于 Java 11 构建,低版本 Java 无法使用

经过和 Spring Security 官方团队的沟通 0.3.1 将继续兼容 Java 1.8

我们联合 springboot 中文社区编译了适配 java 1.8 的版本坐标如下

<dependency> <groupId>io.springboot.security</groupId> <artifactId>spring-security-oauth2-authorization-server</artifactId> <version>0.3.0</version> </dependency> ② 授权模式扩展

  • 扩展支持密码模式,SAS 基于 oauth 2.1 协议不支持密码模式

  • 扩展支持短信登录

③ Redis 令牌存储

  • 官方目前没有提供基于 Redis 令牌持久化方案

  • PIG 扩展 PigRedisOAuth2AuthorizationService 支持

④ Token 输出格式化
  • 使用自省令牌的情况下 默认实现为

ku4R4n7YD1f584KXj4k_3GP9o-HbdY-PDIIh-twPVJTmvHa5mLIoifaNhbBvFNBbse6_wAMcRoOWuVs9qeBWpxQ5zIFrF1A4g1Q7LhVAfH1vo9Uc7WL3SP3u82j0XU5x

  • 为方便结合 redis 高效检索 token ,结合 RDM 分组也可以更方便的图形化观察

统一前缀::令牌类型::客户端ID::用户名::uuid

@Bean public OAuth2TokenGenerator oAuth2TokenGenerator() { CustomeOAuth2AccessTokenGenerator accessTokenGenerator = new CustomeOAuth2AccessTokenGenerator(); // 注入Token 增加关联用户信息 accessTokenGenerator.setAccessTokenCustomizer(new CustomeOAuth2TokenCustomizer()); return new DelegatingOAuth2TokenGenerator(accessTokenGenerator, new OAuth2RefreshTokenGenerator()); } ⑤ Token 输出增强

  • 使用自省令牌,默认情况下输出的 Token 格式

{ "access_token": "xx", "refresh_token": "xx", "scope": "server", "token_type": "Bearer", "expires_in": 43199 }

  • Token 增强输出关联用户信息

{ "sub": "admin", "clientId": "test", "access_token": "xx", "refresh_token": "xx", "license": "pig4cloud.com", "user_info": { "username": "admin", "accountNonExpired": true, "accountNonLocked": true, "credentialsNonExpired": true, "enabled": true, "id": 1, "deptId": 1, "phone": "17034642999", "name": "admin", "attributes": {} } } ⑥ 授权码模式个性化

⑦ 资源服务器
  • 自省方案扩展支持资源资源服务器本地查询

  • 扩展资源服务器本地自省

- 优势: 1. 用户状态实时更新 2. 减少网络调用提升性能

  • 源码: github.com/pig-mesh/pig