|
@@ -37,6 +37,7 @@ import org.springframework.security.authentication.TestingAuthenticationToken;
|
|
import org.springframework.security.core.context.ReactiveSecurityContextHolder;
|
|
import org.springframework.security.core.context.ReactiveSecurityContextHolder;
|
|
import org.springframework.security.oauth2.client.OAuth2AuthorizedClient;
|
|
import org.springframework.security.oauth2.client.OAuth2AuthorizedClient;
|
|
import org.springframework.security.oauth2.client.registration.ClientRegistration;
|
|
import org.springframework.security.oauth2.client.registration.ClientRegistration;
|
|
|
|
+import org.springframework.security.oauth2.client.registration.ReactiveClientRegistrationRepository;
|
|
import org.springframework.security.oauth2.client.registration.TestClientRegistrations;
|
|
import org.springframework.security.oauth2.client.registration.TestClientRegistrations;
|
|
import org.springframework.security.oauth2.client.web.server.ServerOAuth2AuthorizedClientRepository;
|
|
import org.springframework.security.oauth2.client.web.server.ServerOAuth2AuthorizedClientRepository;
|
|
import org.springframework.security.oauth2.core.OAuth2AccessToken;
|
|
import org.springframework.security.oauth2.core.OAuth2AccessToken;
|
|
@@ -71,7 +72,10 @@ import static org.springframework.security.oauth2.client.web.reactive.function.c
|
|
@RunWith(MockitoJUnitRunner.class)
|
|
@RunWith(MockitoJUnitRunner.class)
|
|
public class ServerOAuth2AuthorizedClientExchangeFilterFunctionTests {
|
|
public class ServerOAuth2AuthorizedClientExchangeFilterFunctionTests {
|
|
@Mock
|
|
@Mock
|
|
- private ServerOAuth2AuthorizedClientRepository auth2AuthorizedClientRepository;
|
|
|
|
|
|
+ private ServerOAuth2AuthorizedClientRepository authorizedClientRepository;
|
|
|
|
+
|
|
|
|
+ @Mock
|
|
|
|
+ private ReactiveClientRegistrationRepository clientRegistrationRepository;
|
|
|
|
|
|
private ServerOAuth2AuthorizedClientExchangeFilterFunction function = new ServerOAuth2AuthorizedClientExchangeFilterFunction();
|
|
private ServerOAuth2AuthorizedClientExchangeFilterFunction function = new ServerOAuth2AuthorizedClientExchangeFilterFunction();
|
|
|
|
|
|
@@ -125,7 +129,7 @@ public class ServerOAuth2AuthorizedClientExchangeFilterFunctionTests {
|
|
|
|
|
|
@Test
|
|
@Test
|
|
public void filterWhenRefreshRequiredThenRefresh() {
|
|
public void filterWhenRefreshRequiredThenRefresh() {
|
|
- when(this.auth2AuthorizedClientRepository.saveAuthorizedClient(any(), any(), any())).thenReturn(Mono.empty());
|
|
|
|
|
|
+ when(this.authorizedClientRepository.saveAuthorizedClient(any(), any(), any())).thenReturn(Mono.empty());
|
|
OAuth2AccessTokenResponse response = OAuth2AccessTokenResponse.withToken("token-1")
|
|
OAuth2AccessTokenResponse response = OAuth2AccessTokenResponse.withToken("token-1")
|
|
.tokenType(OAuth2AccessToken.TokenType.BEARER)
|
|
.tokenType(OAuth2AccessToken.TokenType.BEARER)
|
|
.expiresIn(3600)
|
|
.expiresIn(3600)
|
|
@@ -140,7 +144,7 @@ public class ServerOAuth2AuthorizedClientExchangeFilterFunctionTests {
|
|
this.accessToken.getTokenValue(),
|
|
this.accessToken.getTokenValue(),
|
|
issuedAt,
|
|
issuedAt,
|
|
accessTokenExpiresAt);
|
|
accessTokenExpiresAt);
|
|
- this.function = new ServerOAuth2AuthorizedClientExchangeFilterFunction(this.auth2AuthorizedClientRepository);
|
|
|
|
|
|
+ this.function = new ServerOAuth2AuthorizedClientExchangeFilterFunction(this.clientRegistrationRepository, this.authorizedClientRepository);
|
|
|
|
|
|
OAuth2RefreshToken refreshToken = new OAuth2RefreshToken("refresh-token", issuedAt, refreshTokenExpiresAt);
|
|
OAuth2RefreshToken refreshToken = new OAuth2RefreshToken("refresh-token", issuedAt, refreshTokenExpiresAt);
|
|
OAuth2AuthorizedClient authorizedClient = new OAuth2AuthorizedClient(this.registration,
|
|
OAuth2AuthorizedClient authorizedClient = new OAuth2AuthorizedClient(this.registration,
|
|
@@ -154,7 +158,7 @@ public class ServerOAuth2AuthorizedClientExchangeFilterFunctionTests {
|
|
.subscriberContext(ReactiveSecurityContextHolder.withAuthentication(authentication))
|
|
.subscriberContext(ReactiveSecurityContextHolder.withAuthentication(authentication))
|
|
.block();
|
|
.block();
|
|
|
|
|
|
- verify(this.auth2AuthorizedClientRepository).saveAuthorizedClient(any(), eq(authentication), any());
|
|
|
|
|
|
+ verify(this.authorizedClientRepository).saveAuthorizedClient(any(), eq(authentication), any());
|
|
|
|
|
|
List<ClientRequest> requests = this.exchange.getRequests();
|
|
List<ClientRequest> requests = this.exchange.getRequests();
|
|
assertThat(requests).hasSize(2);
|
|
assertThat(requests).hasSize(2);
|
|
@@ -174,7 +178,7 @@ public class ServerOAuth2AuthorizedClientExchangeFilterFunctionTests {
|
|
|
|
|
|
@Test
|
|
@Test
|
|
public void filterWhenRefreshRequiredAndEmptyReactiveSecurityContextThenSaved() {
|
|
public void filterWhenRefreshRequiredAndEmptyReactiveSecurityContextThenSaved() {
|
|
- when(this.auth2AuthorizedClientRepository.saveAuthorizedClient(any(), any(), any())).thenReturn(Mono.empty());
|
|
|
|
|
|
+ when(this.authorizedClientRepository.saveAuthorizedClient(any(), any(), any())).thenReturn(Mono.empty());
|
|
OAuth2AccessTokenResponse response = OAuth2AccessTokenResponse.withToken("token-1")
|
|
OAuth2AccessTokenResponse response = OAuth2AccessTokenResponse.withToken("token-1")
|
|
.tokenType(OAuth2AccessToken.TokenType.BEARER)
|
|
.tokenType(OAuth2AccessToken.TokenType.BEARER)
|
|
.expiresIn(3600)
|
|
.expiresIn(3600)
|
|
@@ -189,7 +193,7 @@ public class ServerOAuth2AuthorizedClientExchangeFilterFunctionTests {
|
|
this.accessToken.getTokenValue(),
|
|
this.accessToken.getTokenValue(),
|
|
issuedAt,
|
|
issuedAt,
|
|
accessTokenExpiresAt);
|
|
accessTokenExpiresAt);
|
|
- this.function = new ServerOAuth2AuthorizedClientExchangeFilterFunction(this.auth2AuthorizedClientRepository);
|
|
|
|
|
|
+ this.function = new ServerOAuth2AuthorizedClientExchangeFilterFunction(this.clientRegistrationRepository, this.authorizedClientRepository);
|
|
|
|
|
|
OAuth2RefreshToken refreshToken = new OAuth2RefreshToken("refresh-token", issuedAt, refreshTokenExpiresAt);
|
|
OAuth2RefreshToken refreshToken = new OAuth2RefreshToken("refresh-token", issuedAt, refreshTokenExpiresAt);
|
|
OAuth2AuthorizedClient authorizedClient = new OAuth2AuthorizedClient(this.registration,
|
|
OAuth2AuthorizedClient authorizedClient = new OAuth2AuthorizedClient(this.registration,
|
|
@@ -201,7 +205,7 @@ public class ServerOAuth2AuthorizedClientExchangeFilterFunctionTests {
|
|
this.function.filter(request, this.exchange)
|
|
this.function.filter(request, this.exchange)
|
|
.block();
|
|
.block();
|
|
|
|
|
|
- verify(this.auth2AuthorizedClientRepository).saveAuthorizedClient(any(), any(), any());
|
|
|
|
|
|
+ verify(this.authorizedClientRepository).saveAuthorizedClient(any(), any(), any());
|
|
|
|
|
|
List<ClientRequest> requests = this.exchange.getRequests();
|
|
List<ClientRequest> requests = this.exchange.getRequests();
|
|
assertThat(requests).hasSize(2);
|
|
assertThat(requests).hasSize(2);
|
|
@@ -221,7 +225,7 @@ public class ServerOAuth2AuthorizedClientExchangeFilterFunctionTests {
|
|
|
|
|
|
@Test
|
|
@Test
|
|
public void filterWhenRefreshTokenNullThenShouldRefreshFalse() {
|
|
public void filterWhenRefreshTokenNullThenShouldRefreshFalse() {
|
|
- this.function = new ServerOAuth2AuthorizedClientExchangeFilterFunction(this.auth2AuthorizedClientRepository);
|
|
|
|
|
|
+ this.function = new ServerOAuth2AuthorizedClientExchangeFilterFunction(this.clientRegistrationRepository, this.authorizedClientRepository);
|
|
|
|
|
|
OAuth2AuthorizedClient authorizedClient = new OAuth2AuthorizedClient(this.registration,
|
|
OAuth2AuthorizedClient authorizedClient = new OAuth2AuthorizedClient(this.registration,
|
|
"principalName", this.accessToken);
|
|
"principalName", this.accessToken);
|
|
@@ -243,7 +247,7 @@ public class ServerOAuth2AuthorizedClientExchangeFilterFunctionTests {
|
|
|
|
|
|
@Test
|
|
@Test
|
|
public void filterWhenNotExpiredThenShouldRefreshFalse() {
|
|
public void filterWhenNotExpiredThenShouldRefreshFalse() {
|
|
- this.function = new ServerOAuth2AuthorizedClientExchangeFilterFunction(this.auth2AuthorizedClientRepository);
|
|
|
|
|
|
+ this.function = new ServerOAuth2AuthorizedClientExchangeFilterFunction(this.clientRegistrationRepository, this.authorizedClientRepository);
|
|
|
|
|
|
OAuth2RefreshToken refreshToken = new OAuth2RefreshToken("refresh-token", this.accessToken.getIssuedAt(), this.accessToken.getExpiresAt());
|
|
OAuth2RefreshToken refreshToken = new OAuth2RefreshToken("refresh-token", this.accessToken.getIssuedAt(), this.accessToken.getExpiresAt());
|
|
OAuth2AuthorizedClient authorizedClient = new OAuth2AuthorizedClient(this.registration,
|
|
OAuth2AuthorizedClient authorizedClient = new OAuth2AuthorizedClient(this.registration,
|
|
@@ -266,12 +270,13 @@ public class ServerOAuth2AuthorizedClientExchangeFilterFunctionTests {
|
|
|
|
|
|
@Test
|
|
@Test
|
|
public void filterWhenClientRegistrationIdThenAuthorizedClientResolved() {
|
|
public void filterWhenClientRegistrationIdThenAuthorizedClientResolved() {
|
|
- this.function = new ServerOAuth2AuthorizedClientExchangeFilterFunction(this.auth2AuthorizedClientRepository);
|
|
|
|
|
|
+ this.function = new ServerOAuth2AuthorizedClientExchangeFilterFunction(this.clientRegistrationRepository, this.authorizedClientRepository);
|
|
|
|
|
|
OAuth2RefreshToken refreshToken = new OAuth2RefreshToken("refresh-token", this.accessToken.getIssuedAt(), this.accessToken.getExpiresAt());
|
|
OAuth2RefreshToken refreshToken = new OAuth2RefreshToken("refresh-token", this.accessToken.getIssuedAt(), this.accessToken.getExpiresAt());
|
|
OAuth2AuthorizedClient authorizedClient = new OAuth2AuthorizedClient(this.registration,
|
|
OAuth2AuthorizedClient authorizedClient = new OAuth2AuthorizedClient(this.registration,
|
|
"principalName", this.accessToken, refreshToken);
|
|
"principalName", this.accessToken, refreshToken);
|
|
- when(this.auth2AuthorizedClientRepository.loadAuthorizedClient(any(), any(), any())).thenReturn(Mono.just(authorizedClient));
|
|
|
|
|
|
+ when(this.authorizedClientRepository.loadAuthorizedClient(any(), any(), any())).thenReturn(Mono.just(authorizedClient));
|
|
|
|
+ when(this.clientRegistrationRepository.findByRegistrationId(any())).thenReturn(Mono.just(this.registration));
|
|
ClientRequest request = ClientRequest.create(GET, URI.create("https://example.com"))
|
|
ClientRequest request = ClientRequest.create(GET, URI.create("https://example.com"))
|
|
.attributes(clientRegistrationId(this.registration.getRegistrationId()))
|
|
.attributes(clientRegistrationId(this.registration.getRegistrationId()))
|
|
.build();
|
|
.build();
|