|
@@ -24,6 +24,7 @@ import java.util.HashMap;
|
|
|
import java.util.Iterator;
|
|
|
import java.util.Map;
|
|
|
import java.util.function.Function;
|
|
|
+import java.util.function.Predicate;
|
|
|
|
|
|
import okhttp3.mockwebserver.MockResponse;
|
|
|
import okhttp3.mockwebserver.MockWebServer;
|
|
@@ -107,6 +108,15 @@ public class OidcReactiveOAuth2UserServiceTests {
|
|
|
assertThatIllegalArgumentException().isThrownBy(() -> this.userService.setClaimTypeConverterFactory(null));
|
|
|
}
|
|
|
|
|
|
+ @Test
|
|
|
+ public void setRetrieveUserInfoWhenNullThenThrowIllegalArgumentException() {
|
|
|
+ // @formatter:off
|
|
|
+ assertThatIllegalArgumentException()
|
|
|
+ .isThrownBy(() -> this.userService.setRetrieveUserInfo(null))
|
|
|
+ .withMessage("retrieveUserInfo cannot be null");
|
|
|
+ // @formatter:on
|
|
|
+ }
|
|
|
+
|
|
|
@Test
|
|
|
public void loadUserWhenUserInfoUriNullThenUserInfoNotRetrieved() {
|
|
|
this.registration.userInfoUri(null);
|
|
@@ -183,6 +193,48 @@ public class OidcReactiveOAuth2UserServiceTests {
|
|
|
verify(customClaimTypeConverterFactory).apply(same(userRequest.getClientRegistration()));
|
|
|
}
|
|
|
|
|
|
+ @Test
|
|
|
+ public void loadUserWhenTokenScopesIsEmptyThenUserInfoNotRetrieved() {
|
|
|
+ // @formatter:off
|
|
|
+ OAuth2AccessToken accessToken = new OAuth2AccessToken(
|
|
|
+ this.accessToken.getTokenType(),
|
|
|
+ this.accessToken.getTokenValue(),
|
|
|
+ this.accessToken.getIssuedAt(),
|
|
|
+ this.accessToken.getExpiresAt(),
|
|
|
+ Collections.emptySet());
|
|
|
+ // @formatter:on
|
|
|
+ OidcUserRequest userRequest = new OidcUserRequest(this.registration.build(), accessToken, this.idToken);
|
|
|
+ OidcUser oidcUser = this.userService.loadUser(userRequest).block();
|
|
|
+ assertThat(oidcUser).isNotNull();
|
|
|
+ assertThat(oidcUser.getUserInfo()).isNull();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void loadUserWhenCustomRetrieveUserInfoSetThenUsed() {
|
|
|
+ Map<String, Object> attributes = new HashMap<>();
|
|
|
+ attributes.put(StandardClaimNames.SUB, "subject");
|
|
|
+ attributes.put("user", "steve");
|
|
|
+ OAuth2User oauth2User = new DefaultOAuth2User(AuthorityUtils.createAuthorityList("ROLE_USER"), attributes,
|
|
|
+ "user");
|
|
|
+ given(this.oauth2UserService.loadUser(any())).willReturn(Mono.just(oauth2User));
|
|
|
+ Predicate<OidcUserRequest> customRetrieveUserInfo = mock(Predicate.class);
|
|
|
+ this.userService.setRetrieveUserInfo(customRetrieveUserInfo);
|
|
|
+ given(customRetrieveUserInfo.test(any(OidcUserRequest.class))).willReturn(true);
|
|
|
+ // @formatter:off
|
|
|
+ OAuth2AccessToken accessToken = new OAuth2AccessToken(
|
|
|
+ this.accessToken.getTokenType(),
|
|
|
+ this.accessToken.getTokenValue(),
|
|
|
+ this.accessToken.getIssuedAt(),
|
|
|
+ this.accessToken.getExpiresAt(),
|
|
|
+ Collections.emptySet());
|
|
|
+ // @formatter:on
|
|
|
+ OidcUserRequest userRequest = new OidcUserRequest(this.registration.build(), accessToken, this.idToken);
|
|
|
+ OidcUser oidcUser = this.userService.loadUser(userRequest).block();
|
|
|
+ assertThat(oidcUser).isNotNull();
|
|
|
+ assertThat(oidcUser.getUserInfo()).isNotNull();
|
|
|
+ verify(customRetrieveUserInfo).test(userRequest);
|
|
|
+ }
|
|
|
+
|
|
|
@Test
|
|
|
public void loadUserWhenTokenContainsScopesThenIndividualScopeAuthorities() {
|
|
|
OidcReactiveOAuth2UserService userService = new OidcReactiveOAuth2UserService();
|