mirror of
https://github.com/spring-projects/spring-security.git
synced 2025-06-01 09:42:13 +00:00
Author: Shraiysh Vaishay cs17btech11050@iith.ac.in
Add WebClientReactiveAuthorizationCodeTokenResponseClient.setWebClient Fixes gh-6182
This commit is contained in:
parent
566bc6a6e1
commit
e25bea2cf7
@ -23,6 +23,7 @@ import org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationExch
|
|||||||
import org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationResponse;
|
import org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationResponse;
|
||||||
import org.springframework.web.reactive.function.BodyInserters;
|
import org.springframework.web.reactive.function.BodyInserters;
|
||||||
import org.springframework.web.reactive.function.client.WebClient;
|
import org.springframework.web.reactive.function.client.WebClient;
|
||||||
|
import org.springframework.util.Assert;
|
||||||
import reactor.core.publisher.Mono;
|
import reactor.core.publisher.Mono;
|
||||||
|
|
||||||
import static org.springframework.security.oauth2.core.web.reactive.function.OAuth2BodyExtractors.oauth2AccessTokenResponse;
|
import static org.springframework.security.oauth2.core.web.reactive.function.OAuth2BodyExtractors.oauth2AccessTokenResponse;
|
||||||
@ -48,11 +49,18 @@ public class WebClientReactiveAuthorizationCodeTokenResponseClient implements Re
|
|||||||
private WebClient webClient = WebClient.builder()
|
private WebClient webClient = WebClient.builder()
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param webClient the webClient to set
|
||||||
|
*/
|
||||||
|
public void setWebClient(WebClient webClient) {
|
||||||
|
Assert.notNull(webClient, "webClient cannot be null");
|
||||||
|
this.webClient = webClient;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Mono<OAuth2AccessTokenResponse> getTokenResponse(OAuth2AuthorizationCodeGrantRequest authorizationGrantRequest) {
|
public Mono<OAuth2AccessTokenResponse> getTokenResponse(OAuth2AuthorizationCodeGrantRequest authorizationGrantRequest) {
|
||||||
return Mono.defer(() -> {
|
return Mono.defer(() -> {
|
||||||
ClientRegistration clientRegistration = authorizationGrantRequest.getClientRegistration();
|
ClientRegistration clientRegistration = authorizationGrantRequest.getClientRegistration();
|
||||||
|
|
||||||
OAuth2AuthorizationExchange authorizationExchange = authorizationGrantRequest.getAuthorizationExchange();
|
OAuth2AuthorizationExchange authorizationExchange = authorizationGrantRequest.getAuthorizationExchange();
|
||||||
String tokenUri = clientRegistration.getProviderDetails().getTokenUri();
|
String tokenUri = clientRegistration.getProviderDetails().getTokenUri();
|
||||||
BodyInserters.FormInserter<String> body = body(authorizationExchange);
|
BodyInserters.FormInserter<String> body = body(authorizationExchange);
|
||||||
|
@ -32,11 +32,13 @@ import org.springframework.security.oauth2.core.endpoint.OAuth2AccessTokenRespon
|
|||||||
import org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationExchange;
|
import org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationExchange;
|
||||||
import org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationRequest;
|
import org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationRequest;
|
||||||
import org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationResponse;
|
import org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationResponse;
|
||||||
|
import org.springframework.web.reactive.function.client.WebClient;
|
||||||
|
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||||
|
import static org.mockito.Mockito.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Rob Winch
|
* @author Rob Winch
|
||||||
@ -259,4 +261,31 @@ public class WebClientReactiveAuthorizationCodeTokenResponseClientTests {
|
|||||||
.setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
|
.setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
|
||||||
.setBody(json);
|
.setBody(json);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test(expected=IllegalArgumentException.class)
|
||||||
|
public void setWebClientNullThenIllegalArgumentException(){
|
||||||
|
tokenResponseClient.setWebClient(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void setCustomWebClientThenCustomWebClientIsUsed() {
|
||||||
|
WebClient customClient = mock(WebClient.class);
|
||||||
|
when(customClient.post()).thenReturn(WebClient.builder().build().post());
|
||||||
|
|
||||||
|
tokenResponseClient.setWebClient(customClient);
|
||||||
|
|
||||||
|
String accessTokenSuccessResponse = "{\n" +
|
||||||
|
" \"access_token\": \"access-token-1234\",\n" +
|
||||||
|
" \"token_type\": \"bearer\",\n" +
|
||||||
|
" \"expires_in\": \"3600\",\n" +
|
||||||
|
" \"scope\": \"openid profile\"\n" +
|
||||||
|
"}\n";
|
||||||
|
this.server.enqueue(jsonResponse(accessTokenSuccessResponse));
|
||||||
|
|
||||||
|
this.clientRegistration.scope("openid", "profile", "email", "address");
|
||||||
|
|
||||||
|
OAuth2AccessTokenResponse response = this.tokenResponseClient.getTokenResponse(authorizationCodeGrantRequest()).block();
|
||||||
|
|
||||||
|
verify(customClient, atLeastOnce()).post();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user