• 拥抱 Spring 全新 OAuth 解决方案


    以下全文 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 的认证中心迁移

    ① Java 1.8 支持

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

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

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

    1. <dependency>
    2. <groupId>io.springboot.security</groupId>
    3. <artifactId>spring-security-oauth2-authorization-server</artifactId>
    4. <version>0.3.0</version>
    5. </dependency>

    ② 授权模式扩展

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

    • 扩展支持短信登录

    ③ Redis 令牌存储

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

    • PIG 扩展 PigRedisOAuth2AuthorizationService 支持

    ④ Token 输出格式化

    • 使用自省令牌的情况下 默认实现为
    ku4R4n7YD1f584KXj4k_3GP9o-HbdY-PDIIh-twPVJTmvHa5mLIoifaNhbBvFNBbse6_wAMcRoOWuVs9qeBWpxQ5zIFrF1A4g1Q7LhVAfH1vo9Uc7WL3SP3u82j0XU5x
    

    • 为方便结合 redis 高效检索 token , 结合 RDM 分组也可以更方便的图形化观察
    统一前缀::令牌类型::客户端ID::用户名::uuid
    
    1. @Bean
    2. public OAuth2TokenGenerator oAuth2TokenGenerator() {
    3. CustomeOAuth2AccessTokenGenerator accessTokenGenerator = new CustomeOAuth2AccessTokenGenerator();
    4. // 注入Token 增加关联用户信息
    5. accessTokenGenerator.setAccessTokenCustomizer(new CustomeOAuth2TokenCustomizer());
    6. return new DelegatingOAuth2TokenGenerator(accessTokenGenerator, new OAuth2RefreshTokenGenerator());
    7. }

    ⑤ Token 输出增强

    • 使用自省令牌,默认情况下输出的 Token 格式
    1. {
    2. "access_token": "xx",
    3. "refresh_token": "xx",
    4. "scope": "server",
    5. "token_type": "Bearer",
    6. "expires_in": 43199
    7. }
    • Token 增强输出关联用户信息
    1. {
    2. "sub": "admin",
    3. "clientId": "test",
    4. "access_token": "xx",
    5. "refresh_token": "xx",
    6. "license": "https://pig4cloud.com",
    7. "user_info": {
    8. "username": "admin",
    9. "accountNonExpired": true,
    10. "accountNonLocked": true,
    11. "credentialsNonExpired": true,
    12. "enabled": true,
    13. "id": 1,
    14. "deptId": 1,
    15. "phone": "17034642999",
    16. "name": "admin",
    17. "attributes": {}
    18. }
    19. }

    ⑥ 授权码模式个性化

    ⑦ 资源服务器

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

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

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

  • 相关阅读:
    【社媒营销】进来了解下Whatsapp Business API?出海群发不用愁!
    PADS自己画的封装,导入PCB没有元件标签?
    ICCV 2023 超分辨率(super-resolution)方向上接收论文总结
    【计算机视觉】图像增强----图像的傅立叶变换
    反射中获取Class对象,成员变量,成员方法,构造方法总结
    Visual Studio扩展插件
    从零开始学习typescript系列2: typescript配置文件ts.config.js之详细解释
    专家建议|经济低迷周期下如何制订求存的增长战略
    类的继承顺序题目解析
    C语言printf中%s、%*s、%*.*s的作用以及实现一个进度条
  • 原文地址:https://blog.csdn.net/m0_59198293/article/details/126640424