Spring Authorization Server 0.2.3釋出,放出聯合身份DEMO

碼農小胖哥發表於2022-03-26

很快啊Spring Authorization Server又發新版本了,現在的版本是0.2.3。本次都有什麼改動呢?我們來了解一下。

0.2.3版本特性

本次更新的新特性不少。

為公開客戶端提供預設的設定

根據RFC6479,包含授權碼(authorization_code)授權並且客戶端認證方式ClientAuthenticationMethod只有一種,為none的客戶端都是公開(Public)客戶端,反之就是機密(Confidential)客戶端。

0.2.3中,為公開的客戶端提供了客戶端預設配置ClientSettings

            if (this.clientSettings == null) {
                ClientSettings.Builder builder = ClientSettings.builder();
                if (isPublicClientType()) {
                    // @formatter:off
                    builder
                            .requireProofKey(true)
                            .requireAuthorizationConsent(true);
                    // @formatter:on
                }
                this.clientSettings = builder.build();
            }

這裡多說點,公開客戶端現在不單純是authorization_code模式授權,必須加上PKCE

OAuth2ClientAuthenticationProvider被細分

Spring Authorization Server目前支援的客戶端認證方式有:

  • client_secret_basic
  • client_secret_post
  • client_secret_jwt
  • private_key_jwt
  • none

之前由 OAuth2ClientAuthenticationProvider 一手包辦,現在職責分離了。

JwtClientAssertionAuthenticationProvider

負責private_key_jwtclient_secret_jwt,具體細節請關注我的專欄
目前胖哥已經實現了完整的private_key_jwt認證的DEMO

ClientSecretAuthenticationProvider

預設的client_secret_basicclient_secret_post由它負責。

PublicClientAuthenticationProvider

處理上面所說的公開客戶端的認證方式。

InMemoryOAuth2AuthorizationService優化

主要優化了對未完成授權資訊OAuth2Authorization儲存的淘汰策略,如果記憶體中儲存的數量超過100,會把最老儲存的資訊淘汰掉。

增加了聯合身份的DEMO

Federated Identity Pattern (聯合身份模式)舉個例子,你同時對接了好幾個身份提供商(IDP),你都需要跳不同的授權伺服器頁面並輸入對應的密碼,現在這些IDP可以都放在Spring Authorization Server下面,委託給Spring Authorization Server來處理身份認證授權。這樣你不用跳來跳去了,只需要維護Spring Authorization ServerIDP的關係了。

請注意該功能不是Spring Authorization Server本身自帶的功能。

OAuth2TokenGenerator

0.2.3抽象了OAuth2Token的的生成模型:

@FunctionalInterface
public interface OAuth2TokenGenerator<T extends OAuth2Token> {
 
    @Nullable
    T generate(OAuth2TokenContext context);

}

OAuth2授權碼使用統一的Token生成模型

授權碼授權中的code的生成現在也需要由OAuth2TokenGenerator實現,實現類為OAuth2AuthorizationCodeGenerator

OAuth2重新整理Token使用統一的Token生成模型

OAuth2重新整理令牌 OAuth2RefreshToken現在同樣需要由OAuth2TokenGenerator實現。

JWT的生成使用統一的模型

現在JWT的生成也由OAuth2TokenGenerator來實現,具體的實現類為JwtGenerator

支援不透明令牌

現在你可以自定義一個OAuth2TokenGenerator並注入到Spring IoC來實現自定義的令牌生成邏輯,這意味著不透明令牌也可以通過自定義來實現。

令牌自省過濾器配置現在可以自定義

0.2.3版本之前令牌自省的配置由 OAuth2AuthorizationServerConfigurer 負責,現在它由獨立的配置類OAuth2TokenIntrospectionEndpointConfigurer負責。

依賴升級

0.2.3也對部分的依賴進行了升級,具體為:

  • 更新到Reactor 2020.0.16
  • 更新到Spring Security 5.5.5
  • 更新到Spring Framework 5.3.16
  • 更新到Spring Boot 2.5.10
胖哥也將跟進變化,對依賴進行逐步升級。

關注公眾號:Felordcn 獲取更多資訊

個人部落格:https://felord.cn

相關文章