代码之家  ›  专栏  ›  技术社区  ›  bpereira

Spring Security 5.2.1+Spring Security-oauth2+WebClient:如何使用密码授权类型

  •  0
  • bpereira  · 技术社区  · 5 年前

    以下是我当前的设置:

    我公开了一个带有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()
    
            // ...
        }
    

    我的应用程序.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_code authorization-grant-type: password ,spring忽略了身份验证的所有逻辑,它不会尝试进行身份验证。

    有人知道如何实施吗 授权类型:密码 ?

    0 回复  |  直到 5 年前