|
@@ -20,9 +20,12 @@ import org.springframework.security.oauth2.core.AuthenticationMethod;
|
|
|
import org.springframework.security.oauth2.core.AuthorizationGrantType;
|
|
|
import org.springframework.security.oauth2.core.ClientAuthenticationMethod;
|
|
|
|
|
|
-import java.util.Arrays;
|
|
|
-import java.util.LinkedHashSet;
|
|
|
+import java.util.Collections;
|
|
|
+import java.util.LinkedHashMap;
|
|
|
+import java.util.Map;
|
|
|
import java.util.Set;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+import java.util.stream.Stream;
|
|
|
|
|
|
import static org.assertj.core.api.Assertions.assertThat;
|
|
|
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
|
@@ -37,11 +40,21 @@ public class ClientRegistrationTests {
|
|
|
private static final String CLIENT_ID = "client-1";
|
|
|
private static final String CLIENT_SECRET = "secret";
|
|
|
private static final String REDIRECT_URI = "https://example.com";
|
|
|
- private static final Set<String> SCOPES = new LinkedHashSet<>(Arrays.asList("openid", "profile", "email"));
|
|
|
+ private static final Set<String> SCOPES = Collections.unmodifiableSet(
|
|
|
+ Stream.of("openid", "profile", "email").collect(Collectors.toSet()));
|
|
|
private static final String AUTHORIZATION_URI = "https://provider.com/oauth2/authorization";
|
|
|
private static final String TOKEN_URI = "https://provider.com/oauth2/token";
|
|
|
private static final String JWK_SET_URI = "https://provider.com/oauth2/keys";
|
|
|
private static final String CLIENT_NAME = "Client 1";
|
|
|
+ private static final Map<String, Object> PROVIDER_CONFIGURATION_METADATA =
|
|
|
+ Collections.unmodifiableMap(createProviderConfigurationMetadata());
|
|
|
+
|
|
|
+ private static Map<String, Object> createProviderConfigurationMetadata() {
|
|
|
+ Map<String, Object> configurationMetadata = new LinkedHashMap<>();
|
|
|
+ configurationMetadata.put("config-1", "value-1");
|
|
|
+ configurationMetadata.put("config-2", "value-2");
|
|
|
+ return configurationMetadata;
|
|
|
+ }
|
|
|
|
|
|
@Test(expected = IllegalArgumentException.class)
|
|
|
public void buildWhenAuthorizationGrantTypeIsNullThenThrowIllegalArgumentException() {
|
|
@@ -73,6 +86,7 @@ public class ClientRegistrationTests {
|
|
|
.tokenUri(TOKEN_URI)
|
|
|
.userInfoAuthenticationMethod(AuthenticationMethod.FORM)
|
|
|
.jwkSetUri(JWK_SET_URI)
|
|
|
+ .providerConfigurationMetadata(PROVIDER_CONFIGURATION_METADATA)
|
|
|
.clientName(CLIENT_NAME)
|
|
|
.build();
|
|
|
|
|
@@ -87,6 +101,7 @@ public class ClientRegistrationTests {
|
|
|
assertThat(registration.getProviderDetails().getTokenUri()).isEqualTo(TOKEN_URI);
|
|
|
assertThat(registration.getProviderDetails().getUserInfoEndpoint().getAuthenticationMethod()).isEqualTo(AuthenticationMethod.FORM);
|
|
|
assertThat(registration.getProviderDetails().getJwkSetUri()).isEqualTo(JWK_SET_URI);
|
|
|
+ assertThat(registration.getProviderDetails().getConfigurationMetadata()).isEqualTo(PROVIDER_CONFIGURATION_METADATA);
|
|
|
assertThat(registration.getClientName()).isEqualTo(CLIENT_NAME);
|
|
|
}
|
|
|
|
|
@@ -276,6 +291,46 @@ public class ClientRegistrationTests {
|
|
|
.build();
|
|
|
}
|
|
|
|
|
|
+ @Test
|
|
|
+ public void buildWhenAuthorizationCodeGrantProviderConfigurationMetadataIsNullThenDefaultToEmpty() {
|
|
|
+ ClientRegistration clientRegistration = ClientRegistration.withRegistrationId(REGISTRATION_ID)
|
|
|
+ .clientId(CLIENT_ID)
|
|
|
+ .clientSecret(CLIENT_SECRET)
|
|
|
+ .clientAuthenticationMethod(ClientAuthenticationMethod.BASIC)
|
|
|
+ .authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE)
|
|
|
+ .redirectUriTemplate(REDIRECT_URI)
|
|
|
+ .scope(SCOPES.toArray(new String[0]))
|
|
|
+ .authorizationUri(AUTHORIZATION_URI)
|
|
|
+ .tokenUri(TOKEN_URI)
|
|
|
+ .userInfoAuthenticationMethod(AuthenticationMethod.HEADER)
|
|
|
+ .providerConfigurationMetadata(null)
|
|
|
+ .jwkSetUri(JWK_SET_URI)
|
|
|
+ .clientName(CLIENT_NAME)
|
|
|
+ .build();
|
|
|
+ assertThat(clientRegistration.getProviderDetails().getConfigurationMetadata()).isNotNull();
|
|
|
+ assertThat(clientRegistration.getProviderDetails().getConfigurationMetadata()).isEmpty();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void buildWhenAuthorizationCodeGrantProviderConfigurationMetadataEmptyThenIsEmpty() {
|
|
|
+ ClientRegistration clientRegistration = ClientRegistration.withRegistrationId(REGISTRATION_ID)
|
|
|
+ .clientId(CLIENT_ID)
|
|
|
+ .clientSecret(CLIENT_SECRET)
|
|
|
+ .clientAuthenticationMethod(ClientAuthenticationMethod.BASIC)
|
|
|
+ .authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE)
|
|
|
+ .redirectUriTemplate(REDIRECT_URI)
|
|
|
+ .scope(SCOPES.toArray(new String[0]))
|
|
|
+ .authorizationUri(AUTHORIZATION_URI)
|
|
|
+ .tokenUri(TOKEN_URI)
|
|
|
+ .userInfoAuthenticationMethod(AuthenticationMethod.HEADER)
|
|
|
+ .providerConfigurationMetadata(Collections.emptyMap())
|
|
|
+ .jwkSetUri(JWK_SET_URI)
|
|
|
+ .clientName(CLIENT_NAME)
|
|
|
+ .build();
|
|
|
+ assertThat(clientRegistration.getProviderDetails().getConfigurationMetadata()).isNotNull();
|
|
|
+ assertThat(clientRegistration.getProviderDetails().getConfigurationMetadata()).isEmpty();
|
|
|
+ }
|
|
|
+
|
|
|
@Test
|
|
|
public void buildWhenImplicitGrantAllAttributesProvidedThenAllAttributesAreSet() {
|
|
|
ClientRegistration registration = ClientRegistration.withRegistrationId(REGISTRATION_ID)
|