写点什么

旧的 Spring Security OAuth 已停止维护,全面拥抱最新解决方案

作者:程序知音
  • 2022 年 7 月 02 日
  • 本文字数:1433 字

    阅读完需:约 5 分钟

以下全文 Spring Authorization Server 简称为: SAS 。本文以 PIG 微服务[1]为演示,适用于 Spring Security OAuth 2.3 <-> 2.5 的认证中心迁移,目标经过改造满足生产业务场景

背景

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


  • 目前 Spring 生态中的 OAuth2 授权服务器是 Spring Authorization Server 已经可以正式生产使用

  • 作为 SpringBoot 3.0 的过渡版本 SpringBoot 2.7.0 过期了大量关于 SpringSecurity 的配置类,如沿用旧版本过期配置无法向上升级。

迁移过程

① 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 存储 令牌

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

  • PIG 扩展 PigRedisOAuth2AuthorizationService 支持

④ Token 输出格式化

  • 使用自省令牌的情况下 默认实现为

ku4R4n7YD1f584KXj4k_3GP9o-HbdY-PDIIh-twPVJTmvHa5mLIoifaNhbBvFNBbse6_wAMcRoOWuVs9qeBWpxQ5zIFrF1A4g1Q7LhVAfH1vo9Uc7WL3SP3u82j0XU5x
复制代码



默认实现

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

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


@Beanpublic 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": "https://pig4cloud.com",    "user_info": {        "username": "admin",        "accountNonExpired": true,        "accountNonLocked": true,        "credentialsNonExpired": true,        "enabled": true,        "id": 1,        "deptId": 1,        "phone": "17034642999",        "name": "admin",        "attributes": {}    }}
复制代码

⑥ 授权码模式个性化


注入自定义 confirm

⑦ 资源服务器

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


默认的资源服务器自省模式

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


扩展资源服务器本地自省

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

总结

  1. 作为 Spring 生态中最重要的一环,当前版本 SAS 已经可以满足生产需求,可以在实际业务中落地使用。

  2. 部分细节(异常处理、事件通知) SAS 处理的并不优雅,例如部分异常直接被 catch 吞掉,需要较强的源码调试能力。


参考资料

PIG 微服务:https://github.com/pig-mesh/pig

用户头像

程序知音

关注

还未添加个人签名 2022.06.25 加入

还未添加个人简介

评论

发布
暂无评论
旧的Spring Security OAuth已停止维护,全面拥抱最新解决方案_Java_程序知音_InfoQ写作社区