最新の安定バージョンについては、Spring Cloud Gateway 5.0.1 を使用してください!

TokenRelay フィルター

トークンリレーは、OAuth2 コンシューマーがクライアントとして機能し、受信トークンを発信リソースリクエストに転送する場所です。コンシューマーは、純粋なクライアント(SSO アプリケーションなど)またはリソースサーバーにすることができます。

Spring Cloud Gateway サーバー MVC は、現在認証されているユーザーの OAuth2 アクセストークンを転送できます。ユーザーの認証には oauth2Login() が使用されます。

RouteConfiguration.java
import static org.springframework.cloud.gateway.server.mvc.filter.BeforeFilterFunctions.uri;
import static org.springframework.cloud.gateway.server.mvc.filter.TokenRelayFilterFunctions.tokenRelay;
import static org.springframework.cloud.gateway.server.mvc.handler.GatewayRouterFunctions.route;
import static org.springframework.cloud.gateway.server.mvc.handler.HandlerFunctions.http;

@Configuration
class RouteConfiguration {

    @Bean
    public RouterFunction<ServerResponse> gatewayRouterFunctionsTokenRelay() {
        return route("resource")
            .GET("/resource", http())
            .before(uri("https://localhost:9000"))
            .filter(tokenRelay())
            .build();
    }
}

またはこれ

application.yaml
spring:
  cloud:
    gateway:
      mvc:
        routes:
        - id: resource
          uri: http://localhost:9000
          predicates:
          - Path=/resource
          filters:
          - TokenRelay=

そして、(ユーザーのログインとトークンの取得に加えて)認証トークンをサービス(この場合は /resource)にダウンストリームで渡します。

Spring Cloud Gateway サーバー MVC でこれを有効にするには、次の依存関係を追加します。

  • org.springframework.boot:spring-boot-starter-oauth2-client

どのように機能するのでしょうか ? 現在認証されているユーザー自身のアクセストークン (ログイン時に取得) が使用され、抽出されたアクセストークンはダウンストリームリクエストのリクエストヘッダーに配置されます。

トークンリレーフィルターは、OAuth2AuthorizedClientManager Bean の作成をトリガーする適切な spring.security.oauth2.client.* プロパティが設定されている場合にのみ機能します。
トークンリレーフィルターで使用されるデフォルトの実装では、メモリ内データストアが使用されます。より堅牢なソリューションが必要な場合は、独自の実装 OAuth2AuthorizedClientService を提供する必要があります。