以下全文 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 的版本坐标如下

  <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
@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": {}    }}

⑥ 受权码模式个性化

⑦ 资源服务器

  • 自省计划扩大反对资源资源服务器本地查问

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

- 劣势: 1. 用户状态实时更新 2. 缩小网络调用晋升性能

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