Spring boot 使用SpringCloudSecurity和SpringCloudGateway的自定义OAuth客户端

Spring boot 使用SpringCloudSecurity和SpringCloudGateway的自定义OAuth客户端,spring-boot,spring-security,spring-cloud-gateway,spring-cloud-security,Spring Boot,Spring Security,Spring Cloud Gateway,Spring Cloud Security,我是webflux的新手,希望满足以下要求: 创建一个Spring云网关项目,将请求路由到不同的微服务 集成多个自定义oauth客户端(CommonOAuth2Provider中预定义的自定义客户端除外) 基于其中一个标头或端点中的值使用oauth客户端 我能够编码并遵循标准实现,并使用预定义的oauth提供商(如okta或google)将SpringCloudGateway与oauth集成。我已经尝试过使用application.yaml文件中的配置以及对security config类使

我是webflux的新手,希望满足以下要求:

  • 创建一个Spring云网关项目,将请求路由到不同的微服务
  • 集成多个自定义oauth客户端(CommonOAuth2Provider中预定义的自定义客户端除外)
  • 基于其中一个标头或端点中的值使用oauth客户端
我能够编码并遵循标准实现,并使用预定义的oauth提供商(如okta或google)将SpringCloudGateway与oauth集成。我已经尝试过使用application.yaml文件中的配置以及对security config类使用annotation EnableWebFluxSecurity的示例

应用程序.yaml

    security:
    oauth2:
      client:
        provider:
          test_provider:
            token-uri: {provider_baseurl}/token.oauth2
            authorization-uri: {provider_baseurl}/authorization.oauth2
            userinfo-uri: {provider_baseurl}/userinfo.openid
            user-name-attribute: sub
            jwk-set-uri: {provider_JWKS_url}
        registration:
          test_reg_provider:
            provider: test_provider
            client-id: {client_id}
            client-secret: {client_secret}
            authorization-grant-type: authorization_code
            redirect-uri: <base_url}/login/oauth2/code/test_reg_provider   
定义网关自定义路由的主要方法

    @SpringBootApplication
    public class AppGatewaySpikeApplication {

    public static void main(String[] args) {
        SpringApplication.run(AppGatewaySpikeApplication.class, args);
    }
    @Bean
    public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {

        return builder.routes()
                .route("demo-app1",r -> r.path("/demo-app1/**").uri("<base_url1>/demo-app1"))
                .route("demo-app2",r -> r.path("/demo-app2/**").uri("<base_url2>/demo-app2"))                
                .build();
    }

}
@springboot应用程序
公共类AppGatewaySpike应用程序{
公共静态void main(字符串[]args){
运行(AppGatewaySpikeApplication.class,args);
}
@豆子
公共路由器或自定义路由器(路由器或编译器生成器){
returnbuilder.routes()
.route(“demo-app1”,r->r.path(“/demo-app1/**”).uri(“/demo-app1”))
.route(“demo-app2”,r->r.path(“/demo-app2/**”).uri(“/demo-app2”))
.build();
}
}
通过上面的代码,我能够从配置的oauth提供程序获得登录页面,并且在登录之后,我能够访问被调用的微服务

我的问题是如何配置多个oauth提供程序,并基于请求头或端点使用它们,最好使用java配置,以便进一步的定制更简单

我在过去使用SpringSecurity2实现了一个类似的解决方案,它有“enableAuth2Client”注释来定义各种OAuth客户机,然后我使用适当的端点将它们配置到过滤器链中

如有任何关于如何进行此项工作的意见/指导,我们将不胜感激。谢谢

    @SpringBootApplication
    public class AppGatewaySpikeApplication {

    public static void main(String[] args) {
        SpringApplication.run(AppGatewaySpikeApplication.class, args);
    }
    @Bean
    public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {

        return builder.routes()
                .route("demo-app1",r -> r.path("/demo-app1/**").uri("<base_url1>/demo-app1"))
                .route("demo-app2",r -> r.path("/demo-app2/**").uri("<base_url2>/demo-app2"))                
                .build();
    }

}