`ReactiveOAuth2AuthorizedClientManager` 未仅通过客户端凭据注册自动配置?

问题描述 投票:0回答:1

我使用 OAuth2 客户端启动器以及

provider
registration
应用程序属性创建了一个非常简单的反应式 (webflux) 应用程序,但
ReactiveOAuth2AuthorizedClientManager
不是自动配置的。知道为什么吗?

这是我的pom:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.2.2</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.c4-soft.springaddons.sample</groupId>
    <artifactId>http-exchange-reactive</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <description>Resource server with custom authentication manager</description>
    <properties>
        <java.version>21</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-oauth2-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.projectreactor</groupId>
            <artifactId>reactor-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

应用属性:

keycloak-base-uri: https://localhost:8443/auth
issuer: ${keycloak-base-uri}/realms/master
keycloak-admin-api-consumer-secret: change-me

spring:
  security:
    oauth2:
      client:
        provider:
          keycloak:
           issuer-uri: ${issuer}
        registration:
          backend-with-client-credentials:
            provider: keycloak
            authorization-grant-type: client_credentials
            client-id: keycloak-admin-api-consumer
            client-secret: ${keycloak-admin-api-consumer-secret}
            scope: openid

最简单的再现器:

@SpringBootApplication
public class HttpClientReactiveApplication {

    public static void main(String[] args) {
        SpringApplication.run(HttpClientReactiveApplication.class, args);
    }

    @Bean
    Converter<String, String> failToInject(ReactiveOAuth2AuthorizedClientManager authorizedClientManager) {
        return source -> source;
    }

}

当我尝试启动应用程序时,我得到:

2024-02-19T15:01:51.575-10:00[0;39m [32m INFO[0;39m [35m21168[0;39m [2m---[0;39m [2m[           main][0;39m [2m[0;39m[36mc.c.o.HttpClientReactiveApplication     [0;39m [2m:[0;39m Starting HttpClientReactiveApplication using Java 21 with PID 21168 (D:\workspaces\libs\http-client-reactive\target\classes started by ch4mp in D:\workspaces\libs\http-client-reactive)
[2m2024-02-19T15:01:51.577-10:00[0;39m [32m INFO[0;39m [35m21168[0;39m [2m---[0;39m [2m[           main][0;39m [2m[0;39m[36mc.c.o.HttpClientReactiveApplication     [0;39m [2m:[0;39m No active profile set, falling back to 1 default profile: "default"
[2m2024-02-19T15:01:52.949-10:00[0;39m [33m WARN[0;39m [35m21168[0;39m [2m---[0;39m [2m[           main][0;39m [2m[0;39m[36monfigReactiveWebServerApplicationContext[0;39m [2m:[0;39m Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'failToInject' defined in com.c4soft.openfeign.HttpClientReactiveApplication: Unsatisfied dependency expressed through method 'failToInject' parameter 0: No qualifying bean of type 'org.springframework.security.oauth2.client.ReactiveOAuth2AuthorizedClientManager' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
[2m2024-02-19T15:01:52.966-10:00[0;39m [32m INFO[0;39m [35m21168[0;39m [2m---[0;39m [2m[           main][0;39m [2m[0;39m[36m.s.b.a.l.ConditionEvaluationReportLogger[0;39m [2m:[0;39m 

Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.
[2m2024-02-19T15:01:52.995-10:00[0;39m [31mERROR[0;39m [35m21168[0;39m [2m---[0;39m [2m[           main][0;39m [2m[0;39m[36mo.s.b.d.LoggingFailureAnalysisReporter  [0;39m [2m:[0;39m 

***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 0 of method failToInject in com.c4soft.openfeign.HttpClientReactiveApplication required a bean of type 'org.springframework.security.oauth2.client.ReactiveOAuth2AuthorizedClientManager' that could not be found.


Action:

Consider defining a bean of type 'org.springframework.security.oauth2.client.ReactiveOAuth2AuthorizedClientManager' in your configuration.

知道为什么

ReactiveOAuth2AuthorizedClientManager
没有自动配置吗?

spring-boot spring-security oauth-2.0 spring-webflux
1个回答
0
投票

我遇到同样的错误:

org.springframework.security.config.annotation.web.reactive.ReactiveOAuth2ClientConfiguration$OAuth2ClientWebFluxSecurityConfiguration 中方法 setAuthorizedClientManagerRegistrar 的参数 0 需要一个类型为 'org.springframework.security.config.annotation.web.reactive.ReactiveOAuth2ClientConfiguration$ReactiveOAuth2AuthorizedClientManagerRegistrar' 的 bean找不到。

© www.soinside.com 2019 - 2024. All rights reserved.