java - 找不到 ClientRegistrationRepository Bean

标签 java spring-boot oauth-2.0 azure-active-directory spring-security-oauth2

我正在尝试使用 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>
我已将这些属性添加到我的 application.yaml 中:
  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] 下的每个属性绑定(bind)到“ClientRegistration 的实例,然后在 ClientRegistrationRepository 中组合每个 ClientRegistration 实例。自动配置还将 ClientRegistrationRepository 注册为 ApplicationContext 中的 @Bean,以便在应用程序需要时可用于依赖注入(inject)。” .
我有以下代码:
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
我不明白问题是什么,我已经遵循了很多例子,看起来它应该可以正常工作。

最佳答案

定义以下属性:

  • azure.activedirectory.client-id=
  • azure.activedirectory.client-secret=
  • azure.activedirectory.tenant-id=
  • azure.activedirectory.authorization-clients.graph.scopes=https://graph.microsoft.com/Analytics.Read,
    电子邮件
  • 关于java - 找不到 ClientRegistrationRepository Bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64713348/

    相关文章:

    Java 对象的初始化/声明

    java - Android – AlarmManager 和 BroadcastReceiver 的问题

    spring-boot - 如何在 log-back.xml 中包含 xml

    grails - 无法计算表达式 '#oauth2.isClient()'

    java - Class.getClasses() 不适用于从接口(interface)继承的类

    java - JTable:用户单选,编程多选

    spring-boot - @SpyBean 和 Mockito.any() 在验证期间

    java - 如何一起使用@RequestBody和@RequestParam

    asp.net - 移动应用程序 Web API 身份验证

    javascript - 如何安全地存储 Discord(OAuth2) 用户的访问 token ?