博客 / 詳情

返回

擁抱Spring全新OAuth2解決方案

以下全文 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存儲 令牌

  • 官方目前沒有提供基於 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": "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. 減少網絡調用提升性能

  • 源碼: https://github.com/pig-mesh/pig
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.