java - 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: {}
解决方案
遇到同样的问题,试试这个:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
和这个:
@EnableWebFluxSecurity
推荐阅读
- python - 使用 paramiko 和 Kivy 的 Android SSH 客户端,在 android 应用程序上打开后崩溃
- javascript - 如何修复此下拉导航 javascript?
- firebase - firestore security rules / check field type in nested object
- java - Android 在 Android API 21 中崩溃
- python - 无法判断我的变量是否为真,然后在 pygame 中使其为真?
- java - 我想使用 onItemClickListener() 为列表视图中的每个视图播放不同的媒体文件
- flutter - 参数类型 'Set
?不能分配给参数类型'Set ' - spring - 如何从单独的线程向用户显示 Vaadin 通知
- python - 如何在 django 中计算每天的女性和男性人数(分组)
- android - 避免在 flutter_local_notifications 中使用自定义图标