TokenRelay
フィルター
トークンリレーは、OAuth2 コンシューマーがクライアントとして機能し、受信トークンを発信リソースリクエストに転送する場所です。コンシューマーは、純粋なクライアント(SSO アプリケーションなど)またはリソースサーバーにすることができます。
Spring Cloud Gateway サーバー MVC は、現在認証されているユーザーの OAuth2 アクセストークンを転送できます。ユーザーの認証には oauth2Login()
が使用されます。
RouteConfiguration.java
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> gatewayRouterFunctionsAddReqHeader() {
return route("resource")
.GET("/resource", http("http://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 を提供する必要があります。 |