首页 > 解决方案 > Spring Security 5.2.1 + spring-security-oauth2 + WebClient:如何使用密码授权类型

问题描述

这是我当前的设置:

我正在使用 oauth2 过滤器公开一个 WebClient bean:

@Configuration
class OAuthConfiguration {
    @Bean("authProvider")
    fun webClient(
        clientRegistrationRepository: ClientRegistrationRepository,
        authorizedClientRepository: OAuth2AuthorizedClientRepository,
        clientHttpConnector: ClientHttpConnector
    ): WebClient {

        val oauth = ServletOAuth2AuthorizedClientExchangeFilterFunction(clientRegistrationRepository, authorizedClientRepository)

        oauth.setDefaultClientRegistrationId("authProvider")
        oauth.setDefaultOAuth2AuthorizedClient(true)

        return WebClient.builder()
            .baseUrl("baseUrl")
            .clientConnector(clientHttpConnector)
            .filter(oauth)
            .build()
    }
}

我在这里使用它:

    fun callExternalService() {

        val retrieve = webClient.get()
            .uri("/uri")
            .retrieve()
            .bodyToMono(String::class.java)
            .block()

        // ...
    }

我的 application.yml 具有以下结构

  security:
    oauth2:
      client:
        provider:
          authProvider:
            token-uri: https://authentication-uri.com
        registration:
          authProvider:
            client-id: client-id
            client-secret: client-secret
            authorization-grant-type: authorization_code
            scope: any

此代码失败,因为我的内部身份验证服务仅接受密码授权类型,并且我可以看到我的身份验证 URL 的响应返回 400 代码。一旦我更改authorization-grant-type: authorization_codeauthorization-grant-type: password,spring 将忽略所有身份验证逻辑,它不会尝试进行身份验证。

有谁知道如何实施authorization-grant-type: password

标签: springspring-securityspring-webclient

解决方案


推荐阅读