springsecurity停止更新 (springsecurity取消加密)

Spring Security 团队正式宣布 Spring Security OAuth 终止维护。

springsecurity停止更新,springsecurityoauth授权流程

spring 官宣终止维护spring security oauth

目前官网的主页已经高亮提醒大家彻底停止维护。

springsecurity停止更新,springsecurityoauth授权流程

官网已经通知EOL

旧的 Spring Security OAuth 项目终止到 2.5.2.RELEASE 版本,该项目将不会再进行任何的迭代,包括 Bug 修复,之前胖哥已经提醒该项目即将停止维护,有心的同学已经进行了迁移。

springsecurity停止更新,springsecurityoauth授权流程

2020年就已经宣布了EOL时间表

项目文档和代码仓库被移除

目前该项目的官方文档已经正式从 spring.io 移除,文档已经指向 404 ,这是连文档也没有了。新增了 OAuth2 授权服务器 Spring Authorization Server 的文档。

springsecurity停止更新,springsecurityoauth授权流程

文档已经被移除

不仅仅文档被移除,连项目的仓库也被迁移到 Spring 的过期项目仓库 spring-attic 并被标记为read-only

springsecurity停止更新,springsecurityoauth授权流程

代码仓库已经被转移

Spring Security OAuth Spring Boot 自动配置代码仓库也一并被迁移,也就是说 Spring Boot 相关的自动配置也被移除。

springsecurity停止更新,springsecurityoauth授权流程

代码仓库已经被转移

从这种情况看来大约 Spring Security OAuth 的确是死了。难道就没有可用的了吗?当然不是。

迁移指南

这是胖哥总结的迁移指南。

依赖项检查

那么如何检查你的项目是否用了旧的OAuth2设施呢?当然是对依赖进行检查。以下清单中的 依赖任何版本 的都是过期的,都需要迁移:

         <dependency>        
                 <groupId>org.springframework.security.oauth</groupId>
                 <artifactId>spring-security-oauth-parent</artifactId>
         </dependency>
         <dependency>        
                 <groupId>org.springframework.security.oauth</groupId>
                 <artifactId>spring-security-oauth</artifactId>
         </dependency>
         <dependency>        
                 <groupId>org.springframework.security.oauth</groupId>
                 <artifactId>spring-security-oauth2</artifactId>
         </dependency>
         <dependency>
             <groupId>org.springframework.security</groupId>
             <artifactId>spring-security-jwt</artifactId>
         </dependency>
         <dependency>
             <groupId>org.springframework.security.oauth.boot</groupId>
             <artifactId>spring-security-oauth2-autoconfigure</artifactId>
         </dependency>

你可以通过 mvn dependency:tree 来检查依赖树是否集成了上述依赖项。

新的OAuth2替代方案

需要开发者掌握 OAuth2.0 OAuth2.1 OIDC 1.0 的一些知识。

Spring Security 5 中集成了 OAuth2 Client Resource Server 两个模块。如果有迁移的需要,建议迁移至最新的 Spring Security 5.7.x ,方便向 Spring 6 过渡。以 Spring Boot 为例,首先要集成 Spring Security

         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-security</artifactId>
         </dependency>

这里建议使用最新版本,目前是2.7。

集成OAuth2 Client依赖

OAuth2 Client 依赖于 Spring Security ,不能单独使用:

         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-oauth2-client</artifactId>
         </dependency>

集成Resource Server依赖

Resource Server 同样也依赖于 Spring Security ,不能单独使用:

         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
         </dependency>

集成OAuth2授权服务器依赖

目前 Spring 生态中的 OAuth2 授权服务器是 Spring Authorization Server ,目前已具备生产就绪能力。在最新的 0.3.0 版本中,官方文档正式在 spring.io 上线,需要你知道的是它必须在 Java 11 及以上版本才能使用。它也作为一个 Spring Security 子模块,不能单独使用:

         <dependency>
             <groupId>org.springframework.security</groupId>
             <artifactId>spring-security-oauth2-authorization-server</artifactId>
             <version>0.3.0</version>
         </dependency>

透露一下,该项目的 Spring Boot Starter 也将在不久实装。

学习指南

胖哥近几个月一直在对新的 OAuth2 相关的进行系统化总结。因此你只要关注胖哥,总能获得相关的知识和实战干货分享。当然这里胖哥也给出了一些参考的文献:

  • OAuth2框架 https://oauth.net
  • OIDC 1.0协议 https://openid.net
  • 新的Spring Security和OAuth2 : http://felord.cn
  • OAuth2系列教程、源码解读 https://blog.csdn.net/qq_35067322/category_11691173.html

项目参考 DEMO :

  • Spring Security 5 学习 https://gitee.com/felord/security-learning
  • Spring Security OAuth2 教程 https://github.com/NotFound403/spring-security-oauth2-tutorial
  • 授权服务器控制台Id Server https://github.com/NotFound403/id-server
  • 登录扩展插件 https://github.com/NotFound403/spring-security-login-extension

总结

旧的 Spring Security OAuth 过期,其实也不必恐慌,除非你们在这一方面的架构需要继续迭代。不过随着新的方案面世,旧方案的可维护性会大大降低,有条件的还是要迁移一下的。 Spring Cloud 也将会在未来某个时间点做出一些调整以适应新的架构。请持续关注,后面会及时带来相关的消息。