找不到java ClientRegistrationRepository Bean
我正在尝试使用Spring Boot配置OAuth2客户机。我有以下依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-oauth2-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-oauth2-jose</artifactId>
</dependency>
我已经将这些属性添加到我的应用程序中。亚马尔:
security:
oauth2:
client:
registration:
azure:
client-id: ****
client-secret: ****
authorization-grant-type: client_credentials
provider:
azure:
authorization-uri: https://login.microsoftonline.com/2fdb7e27-9b62-44f7-a0fe-9836eaa1f161/oauth2/v2.0/authorize
token-uri: https://login.microsoftonline.com/2fdb7e27-9b62-44f7-a0fe-9836eaa1f161/oauth2/v2.0/token
jwk-set-uri: https://login.microsoftonline.com/2fdb7e27-9b62-44f7-a0fe-9836eaa1f161/discovery/v2.0/keys
我从Spring文档中了解到,这应该足以自动配置ClientRegistrationRepository(“Spring Boot 2.x自动配置将Spring.security.oauth2.client.registration.[registrationId]下的每个属性绑定到ClientRegistration实例,然后组合每个ClientRegistration实例)在ClientRegistrationRepository中。自动配置还将ClientRegistrationRepository注册为ApplicationContext中的@Bean,以便在应用程序需要时可用于依赖项注入。“
我有以下代码:
package com.sky.bnc.azurespring
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.security.oauth2.client.OAuth2AuthorizedClientManager
import org.springframework.security.oauth2.client.OAuth2AuthorizedClientProviderBuilder
import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository
import org.springframework.security.oauth2.client.web.DefaultOAuth2AuthorizedClientManager
import org.springframework.security.oauth2.client.web.OAuth2AuthorizedClientRepository
import org.springframework.security.oauth2.client.web.reactive.function.client.ServletOAuth2AuthorizedClientExchangeFilterFunction
import org.springframework.web.reactive.function.client.WebClient
@Configuration
class WebConfiguration {
@Bean
fun authorizedClientManager(clientRegistrationRepository: ClientRegistrationRepository, authorizedClientRepository: OAuth2AuthorizedClientRepository): OAuth2AuthorizedClientManager {
val authorizedClientProvider = OAuth2AuthorizedClientProviderBuilder
.builder()
.authorizationCode()
.refreshToken()
.clientCredentials()
.build()
val authorizedClientManager = DefaultOAuth2AuthorizedClientManager(clientRegistrationRepository, authorizedClientRepository)
authorizedClientManager.setAuthorizedClientProvider(authorizedClientProvider)
return authorizedClientManager
}
@Bean
fun webClient(authorizedClientManager: OAuth2AuthorizedClientManager): WebClient {
val oauth2Client = ServletOAuth2AuthorizedClientExchangeFilterFunction(authorizedClientManager)
oauth2Client.setDefaultClientRegistrationId("azure")
return WebClient
.builder()
.apply(oauth2Client.oauth2Configuration())
.build()
}
}
但是,当我尝试运行应用程序时,会出现以下错误:
APPLICATION FAILED TO START
***************************
Description:
Parameter 0 of method authorizedClientManager in com.sky.bnc.azurespring.WebConfiguration required a bean of type 'org.springframework.security.oauth2.client.registration.ClientRegistrationRepository' that could not be found.
Action:
Consider defining a bean of type 'org.springframework.security.oauth2.client.registration.ClientRegistrationRepository' in your configuration.
Process finished with exit code 1
我不明白问题是什么,我已经遵循了许多例子,似乎它应该只是工作
# 1 楼答案
ClientRegistrationRepository
指的是阻塞环境中OAuth客户端的配置,而不是被动的。如果您的应用程序完全是被动的,请考虑使用^ {CD2}实现。Spring安全项目有一个example project关于如何使用这个项目然而,您仍然可以在同一个应用程序中混合使用反应式和阻塞式方法,尽管这不是非常推荐,但仍然有一个这样的用例。为此,您只需要添加
spring-boot-starter-web
依赖项,以便将阻塞servlet实现添加到类路径中。您可以观察this talk在哪里使用这种方法# 2 楼答案
您面临的问题是由于应用程序中的配置造成的。yaml文件。请检查一切是否正确
由于您正在为Azure AD实现oauth,因此配置必须如下所示:
有关完整的分步指南,请参阅here
# 3 楼答案
定义以下属性:
蔚蓝。activedirectory。客户端id=
蔚蓝。activedirectory。客户端机密=
蔚蓝。activedirectory。租户id=
蔚蓝。activedirectory。授权客户端。图表范围=https://graph.microsoft.com/Analytics.Read, 电子邮件