|
@@ -34,9 +34,9 @@ import org.springframework.security.oauth2.client.web.server.ServerOAuth2Authori
|
|
import org.springframework.security.oauth2.core.TestOAuth2AccessTokens;
|
|
import org.springframework.security.oauth2.core.TestOAuth2AccessTokens;
|
|
import org.springframework.security.oauth2.core.TestOAuth2RefreshTokens;
|
|
import org.springframework.security.oauth2.core.TestOAuth2RefreshTokens;
|
|
import org.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames;
|
|
import org.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames;
|
|
-import org.springframework.util.StringUtils;
|
|
|
|
import org.springframework.web.server.ServerWebExchange;
|
|
import org.springframework.web.server.ServerWebExchange;
|
|
import reactor.core.publisher.Mono;
|
|
import reactor.core.publisher.Mono;
|
|
|
|
+import reactor.util.context.Context;
|
|
|
|
|
|
import java.util.Collections;
|
|
import java.util.Collections;
|
|
import java.util.HashMap;
|
|
import java.util.HashMap;
|
|
@@ -64,6 +64,7 @@ public class DefaultReactiveOAuth2AuthorizedClientManagerTests {
|
|
private Authentication principal;
|
|
private Authentication principal;
|
|
private OAuth2AuthorizedClient authorizedClient;
|
|
private OAuth2AuthorizedClient authorizedClient;
|
|
private MockServerWebExchange serverWebExchange;
|
|
private MockServerWebExchange serverWebExchange;
|
|
|
|
+ private Context context;
|
|
private ArgumentCaptor<OAuth2AuthorizationContext> authorizationContextCaptor;
|
|
private ArgumentCaptor<OAuth2AuthorizationContext> authorizationContextCaptor;
|
|
|
|
|
|
@SuppressWarnings("unchecked")
|
|
@SuppressWarnings("unchecked")
|
|
@@ -75,6 +76,8 @@ public class DefaultReactiveOAuth2AuthorizedClientManagerTests {
|
|
this.authorizedClientRepository = mock(ServerOAuth2AuthorizedClientRepository.class);
|
|
this.authorizedClientRepository = mock(ServerOAuth2AuthorizedClientRepository.class);
|
|
when(this.authorizedClientRepository.loadAuthorizedClient(
|
|
when(this.authorizedClientRepository.loadAuthorizedClient(
|
|
anyString(), any(Authentication.class), any(ServerWebExchange.class))).thenReturn(Mono.empty());
|
|
anyString(), any(Authentication.class), any(ServerWebExchange.class))).thenReturn(Mono.empty());
|
|
|
|
+ when(this.authorizedClientRepository.saveAuthorizedClient(
|
|
|
|
+ any(OAuth2AuthorizedClient.class), any(Authentication.class), any(ServerWebExchange.class))).thenReturn(Mono.empty());
|
|
this.authorizedClientProvider = mock(ReactiveOAuth2AuthorizedClientProvider.class);
|
|
this.authorizedClientProvider = mock(ReactiveOAuth2AuthorizedClientProvider.class);
|
|
when(this.authorizedClientProvider.authorize(any(OAuth2AuthorizationContext.class))).thenReturn(Mono.empty());
|
|
when(this.authorizedClientProvider.authorize(any(OAuth2AuthorizationContext.class))).thenReturn(Mono.empty());
|
|
this.contextAttributesMapper = mock(Function.class);
|
|
this.contextAttributesMapper = mock(Function.class);
|
|
@@ -88,6 +91,7 @@ public class DefaultReactiveOAuth2AuthorizedClientManagerTests {
|
|
this.authorizedClient = new OAuth2AuthorizedClient(this.clientRegistration, this.principal.getName(),
|
|
this.authorizedClient = new OAuth2AuthorizedClient(this.clientRegistration, this.principal.getName(),
|
|
TestOAuth2AccessTokens.scopes("read", "write"), TestOAuth2RefreshTokens.refreshToken());
|
|
TestOAuth2AccessTokens.scopes("read", "write"), TestOAuth2RefreshTokens.refreshToken());
|
|
this.serverWebExchange = MockServerWebExchange.builder(MockServerHttpRequest.get("/")).build();
|
|
this.serverWebExchange = MockServerWebExchange.builder(MockServerHttpRequest.get("/")).build();
|
|
|
|
+ this.context = Context.of(ServerWebExchange.class, this.serverWebExchange);
|
|
this.authorizationContextCaptor = ArgumentCaptor.forClass(OAuth2AuthorizationContext.class);
|
|
this.authorizationContextCaptor = ArgumentCaptor.forClass(OAuth2AuthorizationContext.class);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -119,16 +123,6 @@ public class DefaultReactiveOAuth2AuthorizedClientManagerTests {
|
|
.hasMessage("contextAttributesMapper cannot be null");
|
|
.hasMessage("contextAttributesMapper cannot be null");
|
|
}
|
|
}
|
|
|
|
|
|
- @Test
|
|
|
|
- public void authorizeWhenServerWebExchangeIsNullThenThrowIllegalArgumentException() {
|
|
|
|
- OAuth2AuthorizeRequest authorizeRequest = OAuth2AuthorizeRequest.withClientRegistrationId(this.clientRegistration.getRegistrationId())
|
|
|
|
- .principal(this.principal)
|
|
|
|
- .build();
|
|
|
|
- assertThatThrownBy(() -> this.authorizedClientManager.authorize(authorizeRequest).block())
|
|
|
|
- .isInstanceOf(IllegalArgumentException.class)
|
|
|
|
- .hasMessage("serverWebExchange cannot be null");
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
@Test
|
|
@Test
|
|
public void authorizeWhenRequestIsNullThenThrowIllegalArgumentException() {
|
|
public void authorizeWhenRequestIsNullThenThrowIllegalArgumentException() {
|
|
assertThatThrownBy(() -> this.authorizedClientManager.authorize(null).block())
|
|
assertThatThrownBy(() -> this.authorizedClientManager.authorize(null).block())
|
|
@@ -140,9 +134,8 @@ public class DefaultReactiveOAuth2AuthorizedClientManagerTests {
|
|
public void authorizeWhenClientRegistrationNotFoundThenThrowIllegalArgumentException() {
|
|
public void authorizeWhenClientRegistrationNotFoundThenThrowIllegalArgumentException() {
|
|
OAuth2AuthorizeRequest authorizeRequest = OAuth2AuthorizeRequest.withClientRegistrationId("invalid-registration-id")
|
|
OAuth2AuthorizeRequest authorizeRequest = OAuth2AuthorizeRequest.withClientRegistrationId("invalid-registration-id")
|
|
.principal(this.principal)
|
|
.principal(this.principal)
|
|
- .attribute(ServerWebExchange.class.getName(), this.serverWebExchange)
|
|
|
|
.build();
|
|
.build();
|
|
- assertThatThrownBy(() -> this.authorizedClientManager.authorize(authorizeRequest).block())
|
|
|
|
|
|
+ assertThatThrownBy(() -> this.authorizedClientManager.authorize(authorizeRequest).subscriberContext(this.context).block())
|
|
.isInstanceOf(IllegalArgumentException.class)
|
|
.isInstanceOf(IllegalArgumentException.class)
|
|
.hasMessage("Could not find ClientRegistration with id 'invalid-registration-id'");
|
|
.hasMessage("Could not find ClientRegistration with id 'invalid-registration-id'");
|
|
}
|
|
}
|
|
@@ -155,9 +148,9 @@ public class DefaultReactiveOAuth2AuthorizedClientManagerTests {
|
|
|
|
|
|
OAuth2AuthorizeRequest authorizeRequest = OAuth2AuthorizeRequest.withClientRegistrationId(this.clientRegistration.getRegistrationId())
|
|
OAuth2AuthorizeRequest authorizeRequest = OAuth2AuthorizeRequest.withClientRegistrationId(this.clientRegistration.getRegistrationId())
|
|
.principal(this.principal)
|
|
.principal(this.principal)
|
|
- .attribute(ServerWebExchange.class.getName(), this.serverWebExchange)
|
|
|
|
.build();
|
|
.build();
|
|
- OAuth2AuthorizedClient authorizedClient = this.authorizedClientManager.authorize(authorizeRequest).block();
|
|
|
|
|
|
+ OAuth2AuthorizedClient authorizedClient = this.authorizedClientManager.authorize(authorizeRequest)
|
|
|
|
+ .subscriberContext(this.context).block();
|
|
|
|
|
|
verify(this.authorizedClientProvider).authorize(this.authorizationContextCaptor.capture());
|
|
verify(this.authorizedClientProvider).authorize(this.authorizationContextCaptor.capture());
|
|
verify(this.contextAttributesMapper).apply(eq(authorizeRequest));
|
|
verify(this.contextAttributesMapper).apply(eq(authorizeRequest));
|
|
@@ -168,8 +161,7 @@ public class DefaultReactiveOAuth2AuthorizedClientManagerTests {
|
|
assertThat(authorizationContext.getPrincipal()).isEqualTo(this.principal);
|
|
assertThat(authorizationContext.getPrincipal()).isEqualTo(this.principal);
|
|
|
|
|
|
assertThat(authorizedClient).isNull();
|
|
assertThat(authorizedClient).isNull();
|
|
- verify(this.authorizedClientRepository, never()).saveAuthorizedClient(
|
|
|
|
- any(OAuth2AuthorizedClient.class), eq(this.principal), eq(this.serverWebExchange));
|
|
|
|
|
|
+ verify(this.authorizedClientRepository, never()).saveAuthorizedClient(any(), any(), any());
|
|
}
|
|
}
|
|
|
|
|
|
@SuppressWarnings("unchecked")
|
|
@SuppressWarnings("unchecked")
|
|
@@ -177,15 +169,14 @@ public class DefaultReactiveOAuth2AuthorizedClientManagerTests {
|
|
public void authorizeWhenNotAuthorizedAndSupportedProviderThenAuthorized() {
|
|
public void authorizeWhenNotAuthorizedAndSupportedProviderThenAuthorized() {
|
|
when(this.clientRegistrationRepository.findByRegistrationId(
|
|
when(this.clientRegistrationRepository.findByRegistrationId(
|
|
eq(this.clientRegistration.getRegistrationId()))).thenReturn(Mono.just(this.clientRegistration));
|
|
eq(this.clientRegistration.getRegistrationId()))).thenReturn(Mono.just(this.clientRegistration));
|
|
-
|
|
|
|
when(this.authorizedClientProvider.authorize(
|
|
when(this.authorizedClientProvider.authorize(
|
|
any(OAuth2AuthorizationContext.class))).thenReturn(Mono.just(this.authorizedClient));
|
|
any(OAuth2AuthorizationContext.class))).thenReturn(Mono.just(this.authorizedClient));
|
|
|
|
|
|
OAuth2AuthorizeRequest authorizeRequest = OAuth2AuthorizeRequest.withClientRegistrationId(this.clientRegistration.getRegistrationId())
|
|
OAuth2AuthorizeRequest authorizeRequest = OAuth2AuthorizeRequest.withClientRegistrationId(this.clientRegistration.getRegistrationId())
|
|
.principal(this.principal)
|
|
.principal(this.principal)
|
|
- .attribute(ServerWebExchange.class.getName(), this.serverWebExchange)
|
|
|
|
.build();
|
|
.build();
|
|
- OAuth2AuthorizedClient authorizedClient = this.authorizedClientManager.authorize(authorizeRequest).block();
|
|
|
|
|
|
+ OAuth2AuthorizedClient authorizedClient = this.authorizedClientManager.authorize(authorizeRequest)
|
|
|
|
+ .subscriberContext(this.context).block();
|
|
|
|
|
|
verify(this.authorizedClientProvider).authorize(this.authorizationContextCaptor.capture());
|
|
verify(this.authorizedClientProvider).authorize(this.authorizationContextCaptor.capture());
|
|
verify(this.contextAttributesMapper).apply(eq(authorizeRequest));
|
|
verify(this.contextAttributesMapper).apply(eq(authorizeRequest));
|
|
@@ -200,6 +191,31 @@ public class DefaultReactiveOAuth2AuthorizedClientManagerTests {
|
|
eq(this.authorizedClient), eq(this.principal), eq(this.serverWebExchange));
|
|
eq(this.authorizedClient), eq(this.principal), eq(this.serverWebExchange));
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ @Test
|
|
|
|
+ public void authorizeWhenNotAuthorizedAndSupportedProviderAndExchangeUnavailableThenAuthorizedButNotSaved() {
|
|
|
|
+ when(this.clientRegistrationRepository.findByRegistrationId(
|
|
|
|
+ eq(this.clientRegistration.getRegistrationId()))).thenReturn(Mono.just(this.clientRegistration));
|
|
|
|
+
|
|
|
|
+ when(this.authorizedClientProvider.authorize(
|
|
|
|
+ any(OAuth2AuthorizationContext.class))).thenReturn(Mono.just(this.authorizedClient));
|
|
|
|
+
|
|
|
|
+ OAuth2AuthorizeRequest authorizeRequest = OAuth2AuthorizeRequest.withClientRegistrationId(this.clientRegistration.getRegistrationId())
|
|
|
|
+ .principal(this.principal)
|
|
|
|
+ .build();
|
|
|
|
+ OAuth2AuthorizedClient authorizedClient = this.authorizedClientManager.authorize(authorizeRequest).block();
|
|
|
|
+
|
|
|
|
+ verify(this.authorizedClientProvider).authorize(this.authorizationContextCaptor.capture());
|
|
|
|
+ verify(this.contextAttributesMapper).apply(eq(authorizeRequest));
|
|
|
|
+
|
|
|
|
+ OAuth2AuthorizationContext authorizationContext = this.authorizationContextCaptor.getValue();
|
|
|
|
+ assertThat(authorizationContext.getClientRegistration()).isEqualTo(this.clientRegistration);
|
|
|
|
+ assertThat(authorizationContext.getAuthorizedClient()).isNull();
|
|
|
|
+ assertThat(authorizationContext.getPrincipal()).isEqualTo(this.principal);
|
|
|
|
+
|
|
|
|
+ assertThat(authorizedClient).isSameAs(this.authorizedClient);
|
|
|
|
+ verify(this.authorizedClientRepository, never()).saveAuthorizedClient(any(), any(), any());
|
|
|
|
+ }
|
|
|
|
+
|
|
@SuppressWarnings("unchecked")
|
|
@SuppressWarnings("unchecked")
|
|
@Test
|
|
@Test
|
|
public void authorizeWhenAuthorizedAndSupportedProviderThenReauthorized() {
|
|
public void authorizeWhenAuthorizedAndSupportedProviderThenReauthorized() {
|
|
@@ -216,9 +232,9 @@ public class DefaultReactiveOAuth2AuthorizedClientManagerTests {
|
|
|
|
|
|
OAuth2AuthorizeRequest authorizeRequest = OAuth2AuthorizeRequest.withClientRegistrationId(this.clientRegistration.getRegistrationId())
|
|
OAuth2AuthorizeRequest authorizeRequest = OAuth2AuthorizeRequest.withClientRegistrationId(this.clientRegistration.getRegistrationId())
|
|
.principal(this.principal)
|
|
.principal(this.principal)
|
|
- .attribute(ServerWebExchange.class.getName(), this.serverWebExchange)
|
|
|
|
.build();
|
|
.build();
|
|
- OAuth2AuthorizedClient authorizedClient = this.authorizedClientManager.authorize(authorizeRequest).block();
|
|
|
|
|
|
+ OAuth2AuthorizedClient authorizedClient = this.authorizedClientManager.authorize(authorizeRequest)
|
|
|
|
+ .subscriberContext(this.context).block();
|
|
|
|
|
|
verify(this.authorizedClientProvider).authorize(this.authorizationContextCaptor.capture());
|
|
verify(this.authorizedClientProvider).authorize(this.authorizationContextCaptor.capture());
|
|
verify(this.contextAttributesMapper).apply(any());
|
|
verify(this.contextAttributesMapper).apply(any());
|
|
@@ -241,21 +257,18 @@ public class DefaultReactiveOAuth2AuthorizedClientManagerTests {
|
|
when(this.authorizedClientProvider.authorize(any(OAuth2AuthorizationContext.class))).thenReturn(Mono.just(this.authorizedClient));
|
|
when(this.authorizedClientProvider.authorize(any(OAuth2AuthorizationContext.class))).thenReturn(Mono.just(this.authorizedClient));
|
|
|
|
|
|
// Set custom contextAttributesMapper capable of mapping the form parameters
|
|
// Set custom contextAttributesMapper capable of mapping the form parameters
|
|
- this.authorizedClientManager.setContextAttributesMapper(authorizeRequest -> {
|
|
|
|
- ServerWebExchange serverWebExchange = authorizeRequest.getAttribute(ServerWebExchange.class.getName());
|
|
|
|
- return Mono.just(serverWebExchange)
|
|
|
|
|
|
+ this.authorizedClientManager.setContextAttributesMapper(authorizeRequest ->
|
|
|
|
+ currentServerWebExchange()
|
|
.flatMap(ServerWebExchange::getFormData)
|
|
.flatMap(ServerWebExchange::getFormData)
|
|
.map(formData -> {
|
|
.map(formData -> {
|
|
Map<String, Object> contextAttributes = new HashMap<>();
|
|
Map<String, Object> contextAttributes = new HashMap<>();
|
|
String username = formData.getFirst(OAuth2ParameterNames.USERNAME);
|
|
String username = formData.getFirst(OAuth2ParameterNames.USERNAME);
|
|
|
|
+ contextAttributes.put(OAuth2AuthorizationContext.USERNAME_ATTRIBUTE_NAME, username);
|
|
String password = formData.getFirst(OAuth2ParameterNames.PASSWORD);
|
|
String password = formData.getFirst(OAuth2ParameterNames.PASSWORD);
|
|
- if (StringUtils.hasText(username) && StringUtils.hasText(password)) {
|
|
|
|
- contextAttributes.put(OAuth2AuthorizationContext.USERNAME_ATTRIBUTE_NAME, username);
|
|
|
|
- contextAttributes.put(OAuth2AuthorizationContext.PASSWORD_ATTRIBUTE_NAME, password);
|
|
|
|
- }
|
|
|
|
|
|
+ contextAttributes.put(OAuth2AuthorizationContext.PASSWORD_ATTRIBUTE_NAME, password);
|
|
return contextAttributes;
|
|
return contextAttributes;
|
|
- });
|
|
|
|
- });
|
|
|
|
|
|
+ })
|
|
|
|
+ );
|
|
|
|
|
|
this.serverWebExchange = MockServerWebExchange.builder(
|
|
this.serverWebExchange = MockServerWebExchange.builder(
|
|
MockServerHttpRequest
|
|
MockServerHttpRequest
|
|
@@ -263,12 +276,12 @@ public class DefaultReactiveOAuth2AuthorizedClientManagerTests {
|
|
.contentType(MediaType.APPLICATION_FORM_URLENCODED)
|
|
.contentType(MediaType.APPLICATION_FORM_URLENCODED)
|
|
.body("username=username&password=password"))
|
|
.body("username=username&password=password"))
|
|
.build();
|
|
.build();
|
|
|
|
+ this.context = Context.of(ServerWebExchange.class, this.serverWebExchange);
|
|
|
|
|
|
OAuth2AuthorizeRequest authorizeRequest = OAuth2AuthorizeRequest.withClientRegistrationId(this.clientRegistration.getRegistrationId())
|
|
OAuth2AuthorizeRequest authorizeRequest = OAuth2AuthorizeRequest.withClientRegistrationId(this.clientRegistration.getRegistrationId())
|
|
.principal(this.principal)
|
|
.principal(this.principal)
|
|
- .attribute(ServerWebExchange.class.getName(), this.serverWebExchange)
|
|
|
|
.build();
|
|
.build();
|
|
- this.authorizedClientManager.authorize(authorizeRequest).block();
|
|
|
|
|
|
+ this.authorizedClientManager.authorize(authorizeRequest).subscriberContext(this.context).block();
|
|
|
|
|
|
verify(this.authorizedClientProvider).authorize(this.authorizationContextCaptor.capture());
|
|
verify(this.authorizedClientProvider).authorize(this.authorizationContextCaptor.capture());
|
|
|
|
|
|
@@ -284,9 +297,9 @@ public class DefaultReactiveOAuth2AuthorizedClientManagerTests {
|
|
public void reauthorizeWhenUnsupportedProviderThenNotReauthorized() {
|
|
public void reauthorizeWhenUnsupportedProviderThenNotReauthorized() {
|
|
OAuth2AuthorizeRequest reauthorizeRequest = OAuth2AuthorizeRequest.withAuthorizedClient(this.authorizedClient)
|
|
OAuth2AuthorizeRequest reauthorizeRequest = OAuth2AuthorizeRequest.withAuthorizedClient(this.authorizedClient)
|
|
.principal(this.principal)
|
|
.principal(this.principal)
|
|
- .attribute(ServerWebExchange.class.getName(), this.serverWebExchange)
|
|
|
|
.build();
|
|
.build();
|
|
- OAuth2AuthorizedClient authorizedClient = this.authorizedClientManager.authorize(reauthorizeRequest).block();
|
|
|
|
|
|
+ OAuth2AuthorizedClient authorizedClient = this.authorizedClientManager.authorize(reauthorizeRequest)
|
|
|
|
+ .subscriberContext(this.context).block();
|
|
|
|
|
|
verify(this.authorizedClientProvider).authorize(this.authorizationContextCaptor.capture());
|
|
verify(this.authorizedClientProvider).authorize(this.authorizationContextCaptor.capture());
|
|
verify(this.contextAttributesMapper).apply(eq(reauthorizeRequest));
|
|
verify(this.contextAttributesMapper).apply(eq(reauthorizeRequest));
|
|
@@ -297,8 +310,7 @@ public class DefaultReactiveOAuth2AuthorizedClientManagerTests {
|
|
assertThat(authorizationContext.getPrincipal()).isEqualTo(this.principal);
|
|
assertThat(authorizationContext.getPrincipal()).isEqualTo(this.principal);
|
|
|
|
|
|
assertThat(authorizedClient).isSameAs(this.authorizedClient);
|
|
assertThat(authorizedClient).isSameAs(this.authorizedClient);
|
|
- verify(this.authorizedClientRepository, never()).saveAuthorizedClient(
|
|
|
|
- any(OAuth2AuthorizedClient.class), eq(this.principal), eq(this.serverWebExchange));
|
|
|
|
|
|
+ verify(this.authorizedClientRepository, never()).saveAuthorizedClient(any(), any(), any());
|
|
}
|
|
}
|
|
|
|
|
|
@SuppressWarnings("unchecked")
|
|
@SuppressWarnings("unchecked")
|
|
@@ -312,9 +324,9 @@ public class DefaultReactiveOAuth2AuthorizedClientManagerTests {
|
|
|
|
|
|
OAuth2AuthorizeRequest reauthorizeRequest = OAuth2AuthorizeRequest.withAuthorizedClient(this.authorizedClient)
|
|
OAuth2AuthorizeRequest reauthorizeRequest = OAuth2AuthorizeRequest.withAuthorizedClient(this.authorizedClient)
|
|
.principal(this.principal)
|
|
.principal(this.principal)
|
|
- .attribute(ServerWebExchange.class.getName(), this.serverWebExchange)
|
|
|
|
.build();
|
|
.build();
|
|
- OAuth2AuthorizedClient authorizedClient = this.authorizedClientManager.authorize(reauthorizeRequest).block();
|
|
|
|
|
|
+ OAuth2AuthorizedClient authorizedClient = this.authorizedClientManager.authorize(reauthorizeRequest)
|
|
|
|
+ .subscriberContext(this.context).block();
|
|
|
|
|
|
verify(this.authorizedClientProvider).authorize(this.authorizationContextCaptor.capture());
|
|
verify(this.authorizedClientProvider).authorize(this.authorizationContextCaptor.capture());
|
|
verify(this.contextAttributesMapper).apply(eq(reauthorizeRequest));
|
|
verify(this.contextAttributesMapper).apply(eq(reauthorizeRequest));
|
|
@@ -346,12 +358,12 @@ public class DefaultReactiveOAuth2AuthorizedClientManagerTests {
|
|
.get("/")
|
|
.get("/")
|
|
.queryParam(OAuth2ParameterNames.SCOPE, "read write"))
|
|
.queryParam(OAuth2ParameterNames.SCOPE, "read write"))
|
|
.build();
|
|
.build();
|
|
|
|
+ this.context = Context.of(ServerWebExchange.class, this.serverWebExchange);
|
|
|
|
|
|
OAuth2AuthorizeRequest reauthorizeRequest = OAuth2AuthorizeRequest.withAuthorizedClient(this.authorizedClient)
|
|
OAuth2AuthorizeRequest reauthorizeRequest = OAuth2AuthorizeRequest.withAuthorizedClient(this.authorizedClient)
|
|
.principal(this.principal)
|
|
.principal(this.principal)
|
|
- .attribute(ServerWebExchange.class.getName(), this.serverWebExchange)
|
|
|
|
.build();
|
|
.build();
|
|
- this.authorizedClientManager.authorize(reauthorizeRequest).block();
|
|
|
|
|
|
+ this.authorizedClientManager.authorize(reauthorizeRequest).subscriberContext(this.context).block();
|
|
|
|
|
|
verify(this.authorizedClientProvider).authorize(this.authorizationContextCaptor.capture());
|
|
verify(this.authorizedClientProvider).authorize(this.authorizationContextCaptor.capture());
|
|
|
|
|
|
@@ -359,4 +371,10 @@ public class DefaultReactiveOAuth2AuthorizedClientManagerTests {
|
|
String[] requestScopeAttribute = authorizationContext.getAttribute(OAuth2AuthorizationContext.REQUEST_SCOPE_ATTRIBUTE_NAME);
|
|
String[] requestScopeAttribute = authorizationContext.getAttribute(OAuth2AuthorizationContext.REQUEST_SCOPE_ATTRIBUTE_NAME);
|
|
assertThat(requestScopeAttribute).contains("read", "write");
|
|
assertThat(requestScopeAttribute).contains("read", "write");
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ private Mono<ServerWebExchange> currentServerWebExchange() {
|
|
|
|
+ return Mono.subscriberContext()
|
|
|
|
+ .filter(c -> c.hasKey(ServerWebExchange.class))
|
|
|
|
+ .map(c -> c.get(ServerWebExchange.class));
|
|
|
|
+ }
|
|
}
|
|
}
|