跳到主要内容

TokenRelay 过滤器

DeepSeek V3 中英对照 TokenRelay Filter TokenRelay Filter

令牌中继是指 OAuth2 消费者充当客户端,并将传入的令牌转发到外发的资源请求。消费者可以是纯客户端(如单点登录应用程序)或资源服务器。

Spring Cloud Gateway Server MVC 可以转发当前已认证用户的 OAuth2 访问令牌,oauth2Login() 用于对用户进行认证。

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();
}
}
java

或这个

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

并且它(除了登录用户并获取令牌外)还会将身份验证令牌传递给下游服务(在本例中为 /resource)。

要为 Spring Cloud Gateway Server MVC 启用此功能,请添加以下依赖项

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

它是如何工作的?使用当前已认证用户的访问令牌(在登录时获取),并将提取的访问令牌放入下游请求的请求头中。

备注

Token Relay 过滤器仅在设置了正确的 spring.security.oauth2.client.* 属性时才会生效,这些属性将触发创建 OAuth2AuthorizedClientManager bean。

备注

Token Relay 过滤器使用的默认实现是一个内存数据存储。如果你需要一个更健壮的解决方案,你需要提供自己的 OAuth2AuthorizedClientService 实现。