正在向API网关中的请求添加客户端机密和客户端id



我的Spring Cloud Gateway后面有一个Auth服务器。我想通过网关执行JWT身份验证。当我调用相应的API端点时,我必须传递我的用户名、密码、client-id和client-securt来生成JWT令牌。

用户只需使用用户名和密码调用端点,API网关在附加client-id和client-securt后将请求转发到Auth服务器。这是我的全部计划。

我的问题是,如何使用Spring Cloud Gateway将客户端id和客户端机密附加到我的请求?

提前感谢!

您可以创建如下所示的java配置:

@Configuration
public class SpringCloudConfig {
@Bean
public RouteLocator gatewayRoutes(RouteLocatorBuilder builder) {
return builder.routes()
.route(r -> r.path("/oauth/token")
.uri("http://localhost:8081/oauth/token")
.id("auth"))
.build();
}
}

在这种情况下,原始请求和响应将简单地通过spring云网关进行代理。

例如,如果spring云网关在8080端口上运行,则请求将是(授权服务器在8081端口上运行(:

curl --location --request POST 'http://localhost:8080/oauth/token' 
--header 'Content-Type: application/x-www-form-urlencoded' 
--header 'Authorization: Basic c2VydmVyX2FwcDpzZWNyZXQ=' 
--header 'Content-Type: application/x-www-form-urlencoded' 
--data-urlencode 'grant_type=client_credentials' 
--data-urlencode 'client_id=server_app'

您可以在客户端上添加客户端id、客户端机密或其他数据。

如果你需要修改请求主体,你可以添加一个过滤器:

@Configuration
public class SpringCloudConfig {
@Bean
public RouteLocator gatewayRoutes(RouteLocatorBuilder builder) {
return builder.routes()
.route(r -> r.path("/oauth/token")
.filters(f -> f.modifyRequestBody(String.class, String.class, MediaType.APPLICATION_JSON_VALUE,
(exchange, body) -> {
String modifiedBody = someService.modify(body);
return Mono.just(modifiedBody);
})
)
.uri("http://localhost:8081/oauth/token")
.id("auth"))
.build();
}
}

相关内容

  • 没有找到相关文章