このバージョンはまだ開発中であり、まだ安定しているとは見なされていません。最新の安定バージョンについては、Spring Security 6.4.4 を使用してください!

OAuth 2.0 リソースサーバーベアラートークン

ベアラートークンの解決

デフォルトでは、ResourceServer は Authorization ヘッダーでベアラートークンを探します。ただし、このトークンは確認できます。

例: カスタムヘッダーからベアラートークンを読み取る必要がある場合があります。これを行うには、ServerBearerTokenAuthenticationConverter のインスタンスを DSL に接続します。

カスタムベアラートークンヘッダー
ServerBearerTokenAuthenticationConverter converter = new ServerBearerTokenAuthenticationConverter();
converter.setBearerTokenHeaderName(HttpHeaders.PROXY_AUTHORIZATION);
http
    .oauth2ResourceServer(oauth2 -> oauth2
        .bearerTokenConverter(converter)
    );

ベアラートークンの伝播

ベアラートークンができたため、それを下流のサービスに渡すことができます。これは ServerBearerExchangeFilterFunction (Javadoc) で可能です:

@Bean
public WebClient rest() {
    return WebClient.builder()
            .filter(new ServerBearerExchangeFilterFunction())
            .build();
}

前の例に示した WebClient がリクエストを実行すると、Spring Security は現在の Authentication を検索し、AbstractOAuth2Token (Javadoc) 資格情報を抽出します。次に、そのトークンを Authorization ヘッダーに伝播します。例:

this.rest.get()
        .uri("https://other-service.example.com/endpoint")
        .retrieve()
        .bodyToMono(String.class)

上記の例では、other-service.example.com/endpoint (英語) が呼び出され、ベアラートークン Authorization ヘッダーが追加されます。

この動作をオーバーライドする必要がある場所では、ヘッダーを自分で指定できます。

this.rest.get()
        .uri("https://other-service.example.com/endpoint")
        .headers(headers -> headers.setBearerAuth(overridingToken))
        .retrieve()
        .bodyToMono(String.class)

この場合、フィルターはフォールバックし、リクエストを残りの Web フィルターチェーンに転送します。

OAuth 2.0 クライアントフィルター機能 (Javadoc) とは異なり、このフィルター関数は、トークンの有効期限が切れた場合でも、トークンの更新を試みません。