@ -1,5 +1,5 @@
@@ -1,5 +1,5 @@
/ *
* Copyright 2020 - 2024 the original author or authors .
* Copyright 2020 - 2025 the original author or authors .
*
* Licensed under the Apache License , Version 2 . 0 ( the "License" ) ;
* you may not use this file except in compliance with the License .
@ -15,7 +15,6 @@
@@ -15,7 +15,6 @@
* /
package sample.config ;
import java.util.Arrays ;
import java.util.function.Supplier ;
import javax.net.ssl.KeyManagerFactory ;
@ -30,7 +29,6 @@ import sample.authorization.DeviceCodeOAuth2AuthorizedClientProvider;
@@ -30,7 +29,6 @@ import sample.authorization.DeviceCodeOAuth2AuthorizedClientProvider;
import org.springframework.beans.factory.annotation.Qualifier ;
import org.springframework.boot.ssl.SslBundle ;
import org.springframework.boot.ssl.SslBundles ;
import org.springframework.boot.web.client.RestTemplateBuilder ;
import org.springframework.context.annotation.Bean ;
import org.springframework.context.annotation.Configuration ;
import org.springframework.http.client.ClientHttpRequestFactory ;
@ -40,10 +38,9 @@ import org.springframework.http.converter.FormHttpMessageConverter;
@@ -40,10 +38,9 @@ import org.springframework.http.converter.FormHttpMessageConverter;
import org.springframework.security.oauth2.client.OAuth2AuthorizedClientManager ;
import org.springframework.security.oauth2.client.OAuth2AuthorizedClientProvider ;
import org.springframework.security.oauth2.client.OAuth2AuthorizedClientProviderBuilder ;
import org.springframework.security.oauth2.client.endpoint.DefaultClientCredentialsTokenResponseClient ;
import org.springframework.security.oauth2.client.endpoint.OAuth2AccessTokenResponseClient ;
import org.springframework.security.oauth2.client.endpoint.OAuth2ClientCredentialsGrantRequest ;
import org.springframework.security.oauth2.client.endpoint.OAuth2ClientCredentialsGrantRequestEntityConverter ;
import org.springframework.security.oauth2.client.endpoint.RestClientClientCredentialsTokenResponseClient ;
import org.springframework.security.oauth2.client.http.OAuth2ErrorResponseErrorHandler ;
import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository ;
import org.springframework.security.oauth2.client.web.DefaultOAuth2AuthorizedClientManager ;
@ -53,7 +50,7 @@ import org.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames;
@@ -53,7 +50,7 @@ import org.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames;
import org.springframework.security.oauth2.core.http.converter.OAuth2AccessTokenResponseHttpMessageConverter ;
import org.springframework.util.LinkedMultiValueMap ;
import org.springframework.util.MultiValueMap ;
import org.springframework.web.client.RestTemplate ;
import org.springframework.web.client.RestClient ;
import org.springframework.web.reactive.function.client.WebClient ;
/ * *
@ -83,17 +80,18 @@ public class WebClientConfig {
@@ -83,17 +80,18 @@ public class WebClientConfig {
public WebClient selfSignedDemoClientWebClient (
ClientRegistrationRepository clientRegistrationRepository ,
OAuth2AuthorizedClientRepository authorizedClientRepository ,
RestTemplateBuilder restTemplateBuilder ,
@Qualifier ( "self-signed-demo-client-http-request-factory" ) Supplier < ClientHttpRequestFactory > clientHttpRequestFactory ,
SslBundles sslBundles ) throws Exception {
// @formatter:off
RestTemplate restTemplate = restTemplateBuilder
. requestFactory ( clientHttpRequestFactory )
. messageConverters ( Arrays . asList (
new FormHttpMessageConverter ( ) ,
new OAuth2AccessTokenResponseHttpMessageConverter ( ) ) )
. errorHandler ( new OAuth2ErrorResponseErrorHandler ( ) )
RestClient restClient = RestClient . builder ( )
. requestFactory ( clientHttpRequestFactory . get ( ) )
. messageConverters ( ( messageConverters ) - > {
messageConverters . clear ( ) ;
messageConverters . add ( new FormHttpMessageConverter ( ) ) ;
messageConverters . add ( new OAuth2AccessTokenResponseHttpMessageConverter ( ) ) ;
} )
. defaultStatusHandler ( new OAuth2ErrorResponseErrorHandler ( ) )
. build ( ) ;
// @formatter:on
@ -102,7 +100,7 @@ public class WebClientConfig {
@@ -102,7 +100,7 @@ public class WebClientConfig {
OAuth2AuthorizedClientProviderBuilder . builder ( )
. clientCredentials ( clientCredentials - >
clientCredentials . accessTokenResponseClient (
createClientCredentialsTokenResponseClient ( restTemplate ) ) )
createClientCredentialsTokenResponseClient ( restClient ) ) )
. build ( ) ;
// @formatter:on
@ -124,16 +122,17 @@ public class WebClientConfig {
@@ -124,16 +122,17 @@ public class WebClientConfig {
public OAuth2AuthorizedClientManager authorizedClientManager (
ClientRegistrationRepository clientRegistrationRepository ,
OAuth2AuthorizedClientRepository authorizedClientRepository ,
RestTemplateBuilder restTemplateBuilder ,
@Qualifier ( "default-client-http-request-factory" ) Supplier < ClientHttpRequestFactory > clientHttpRequestFactory ) {
// @formatter:off
RestTemplate restTemplate = restTemplateBuilder
. requestFactory ( clientHttpRequestFactory )
. messageConverters ( Arrays . asList (
new FormHttpMessageConverter ( ) ,
new OAuth2AccessTokenResponseHttpMessageConverter ( ) ) )
. errorHandler ( new OAuth2ErrorResponseErrorHandler ( ) )
RestClient restClient = RestClient . builder ( )
. requestFactory ( clientHttpRequestFactory . get ( ) )
. messageConverters ( ( messageConverters ) - > {
messageConverters . clear ( ) ;
messageConverters . add ( new FormHttpMessageConverter ( ) ) ;
messageConverters . add ( new OAuth2AccessTokenResponseHttpMessageConverter ( ) ) ;
} )
. defaultStatusHandler ( new OAuth2ErrorResponseErrorHandler ( ) )
. build ( ) ;
// @formatter:on
@ -144,7 +143,7 @@ public class WebClientConfig {
@@ -144,7 +143,7 @@ public class WebClientConfig {
. refreshToken ( )
. clientCredentials ( clientCredentials - >
clientCredentials . accessTokenResponseClient (
createClientCredentialsTokenResponseClient ( restTemplate ) ) )
createClientCredentialsTokenResponseClient ( restClient ) ) )
. provider ( new DeviceCodeOAuth2AuthorizedClientProvider ( ) )
. build ( ) ;
// @formatter:on
@ -177,20 +176,16 @@ public class WebClientConfig {
@@ -177,20 +176,16 @@ public class WebClientConfig {
}
private static OAuth2AccessTokenResponseClient < OAuth2ClientCredentialsGrantRequest > createClientCredentialsTokenResponseClient (
RestTemplate restTemplate ) {
DefaultClientCredentialsTokenResponseClient clientCredentialsTokenResponseClient =
new DefaultClientCredentialsTokenResponseClient ( ) ;
clientCredentialsTokenResponseClient . setRestOperations ( restTemplate ) ;
OAuth2ClientCredentialsGrantRequestEntityConverter clientCredentialsGrantRequestEntityConverter =
new OAuth2ClientCredentialsGrantRequestEntityConverter ( ) ;
clientCredentialsGrantRequestEntityConverter . addParametersConverter ( authorizationGrantRequest - > {
RestClient restClient ) {
RestClientClientCredentialsTokenResponseClient clientCredentialsTokenResponseClient =
new RestClientClientCredentialsTokenResponseClient ( ) ;
clientCredentialsTokenResponseClient . addParametersConverter ( authorizationGrantRequest - > {
MultiValueMap < String , String > parameters = new LinkedMultiValueMap < > ( ) ;
// client_id parameter is required for tls_client_auth method
parameters . add ( OAuth2ParameterNames . CLIENT_ID , authorizationGrantRequest . getClientRegistration ( ) . getClientId ( ) ) ;
return parameters ;
} ) ;
clientCredentialsTokenResponseClient . setRequestEntityConverter ( clientCredentialsGrantRequestEntityConverter ) ;
clientCredentialsTokenResponseClient . setRestClient ( restClient ) ;
return clientCredentialsTokenResponseClient ;
}