首页 > 解决方案 > WebClient Oauth2 Openid 服务到服务连接的 Bean ServerOAuth2AuthorizedClientRepository 缺失错误

问题描述

我想建立服务 A 到服务 B 的连接。服务 B 受 OAuth2 保护。

因此,我想使用 webClient 来进行客户端 ID/凭据授权。

下面是我的配置代码

@Bean
ReactiveClientRegistrationRepository getRegistration() {
    ClientRegistration registration = ClientRegistration
            .withRegistrationId("keycloak")
            .tokenUri(tokenUri)
            .clientId(clientId)
            .clientSecret(clientSecret)
            .authorizationGrantType(AuthorizationGrantType.CLIENT_CREDENTIALS)
            .build();
    return new InMemoryReactiveClientRegistrationRepository(registration);
}

@Bean(name = "keycloak")
WebClient webClient(ReactiveClientRegistrationRepository clientRegistrations,
                    ServerOAuth2AuthorizedClientRepository authorizedClients) {
    ServerOAuth2AuthorizedClientExchangeFilterFunction oauth =
            new ServerOAuth2AuthorizedClientExchangeFilterFunction(clientRegistrations, authorizedClients);
    oauth.setDefaultOAuth2AuthorizedClient(true);
    oauth.setDefaultClientRegistrationId("keycloak");
    return WebClient.builder()
            .filter(oauth)
            .build();
}

我使用的依赖项如下所示

<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-oauth2-client</artifactId>
    <version>5.3.4.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-webflux</artifactId>
    <version>2.3.3.RELEASE</version>
</dependency>

以及我使用的应用程序属性

spring.security.oauth2.client.provider.keycloak.issuer-uri=https://<domain>/auth/realms/<realm_name>
spring.security.oauth2.client.registration.keycloak.authorization-grant-type=client_credentials
spring.security.oauth2.client.registration.keycloak.provider=keycloak
spring.security.oauth2.client.registration.keycloak.client-id=<>
spring.security.oauth2.client.registration.keycloak.client-secret=<>

但是,当我启动我的 spring boot 应用程序时遇到了这个问题

org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.security.oauth2.client.web.server.ServerOAuth2AuthorizedClientRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}

标签: javaspring-bootoauth-2.0openid-connect

解决方案


遇到同样的问题,试试这个:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-security</artifactId>
</dependency>

和这个:

@EnableWebFluxSecurity

推荐阅读