From 6dc3944eef3d73d9d76c863114f24ca7d1b1337c Mon Sep 17 00:00:00 2001 From: Joe Grandja Date: Mon, 31 Oct 2022 14:35:45 -0400 Subject: [PATCH] Add OidcClientRegistrationAuthenticationProvider.setRegisteredClientConverter() Closes gh-696 --- ...ntConfigurationAuthenticationProvider.java | 3 ++- ...entRegistrationAuthenticationProvider.java | 20 +++++++++++++++---- ...lientOidcClientRegistrationConverter.java} | 2 +- ...gistrationAuthenticationProviderTests.java | 7 +++++++ 4 files changed, 26 insertions(+), 6 deletions(-) rename oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/oidc/authentication/{OidcClientRegistrationConverter.java => RegisteredClientOidcClientRegistrationConverter.java} (96%) diff --git a/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/oidc/authentication/OidcClientConfigurationAuthenticationProvider.java b/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/oidc/authentication/OidcClientConfigurationAuthenticationProvider.java index 575e4593..5ce732b7 100644 --- a/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/oidc/authentication/OidcClientConfigurationAuthenticationProvider.java +++ b/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/oidc/authentication/OidcClientConfigurationAuthenticationProvider.java @@ -46,6 +46,7 @@ import org.springframework.util.StringUtils; * @since 0.4.0 * @see RegisteredClientRepository * @see OAuth2AuthorizationService + * @see OidcClientRegistrationAuthenticationToken * @see OidcClientRegistrationAuthenticationProvider * @see 4. Client Configuration Endpoint */ @@ -67,7 +68,7 @@ public final class OidcClientConfigurationAuthenticationProvider implements Auth Assert.notNull(authorizationService, "authorizationService cannot be null"); this.registeredClientRepository = registeredClientRepository; this.authorizationService = authorizationService; - this.clientRegistrationConverter = new OidcClientRegistrationConverter(); + this.clientRegistrationConverter = new RegisteredClientOidcClientRegistrationConverter(); } @Override diff --git a/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/oidc/authentication/OidcClientRegistrationAuthenticationProvider.java b/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/oidc/authentication/OidcClientRegistrationAuthenticationProvider.java index e7ec6233..81e88c79 100644 --- a/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/oidc/authentication/OidcClientRegistrationAuthenticationProvider.java +++ b/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/oidc/authentication/OidcClientRegistrationAuthenticationProvider.java @@ -74,6 +74,7 @@ import org.springframework.util.StringUtils; * @see RegisteredClientRepository * @see OAuth2AuthorizationService * @see OAuth2TokenGenerator + * @see OidcClientRegistrationAuthenticationToken * @see OidcClientConfigurationAuthenticationProvider * @see 3. Client Registration Endpoint */ @@ -84,7 +85,7 @@ public final class OidcClientRegistrationAuthenticationProvider implements Authe private final OAuth2AuthorizationService authorizationService; private final OAuth2TokenGenerator tokenGenerator; private final Converter clientRegistrationConverter; - private final Converter registeredClientConverter; + private Converter registeredClientConverter; /** * Constructs an {@code OidcClientRegistrationAuthenticationProvider} using the provided parameters. @@ -102,8 +103,8 @@ public final class OidcClientRegistrationAuthenticationProvider implements Authe this.registeredClientRepository = registeredClientRepository; this.authorizationService = authorizationService; this.tokenGenerator = tokenGenerator; - this.clientRegistrationConverter = new OidcClientRegistrationConverter(); - this.registeredClientConverter = new RegisteredClientConverter(); + this.clientRegistrationConverter = new RegisteredClientOidcClientRegistrationConverter(); + this.registeredClientConverter = new OidcClientRegistrationRegisteredClientConverter(); } @Override @@ -147,6 +148,17 @@ public final class OidcClientRegistrationAuthenticationProvider implements Authe return OidcClientRegistrationAuthenticationToken.class.isAssignableFrom(authentication); } + /** + * Sets the {@link Converter} used for converting an {@link OidcClientRegistration} to a {@link RegisteredClient}. + * + * @param registeredClientConverter the {@link Converter} used for converting an {@link OidcClientRegistration} to a {@link RegisteredClient} + * @since 0.4.0 + */ + public void setRegisteredClientConverter(Converter registeredClientConverter) { + Assert.notNull(registeredClientConverter, "registeredClientConverter cannot be null"); + this.registeredClientConverter = registeredClientConverter; + } + private OidcClientRegistrationAuthenticationToken registerClient(OidcClientRegistrationAuthenticationToken clientRegistrationAuthentication, OAuth2Authorization authorization) { @@ -293,7 +305,7 @@ public final class OidcClientRegistrationAuthenticationProvider implements Authe throw new OAuth2AuthenticationException(error); } - private static final class RegisteredClientConverter implements Converter { + private static final class OidcClientRegistrationRegisteredClientConverter implements Converter { private static final StringKeyGenerator CLIENT_ID_GENERATOR = new Base64StringKeyGenerator( Base64.getUrlEncoder().withoutPadding(), 32); private static final StringKeyGenerator CLIENT_SECRET_GENERATOR = new Base64StringKeyGenerator( diff --git a/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/oidc/authentication/OidcClientRegistrationConverter.java b/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/oidc/authentication/RegisteredClientOidcClientRegistrationConverter.java similarity index 96% rename from oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/oidc/authentication/OidcClientRegistrationConverter.java rename to oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/oidc/authentication/RegisteredClientOidcClientRegistrationConverter.java index b7e16d4e..75aa17c9 100644 --- a/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/oidc/authentication/OidcClientRegistrationConverter.java +++ b/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/oidc/authentication/RegisteredClientOidcClientRegistrationConverter.java @@ -31,7 +31,7 @@ import org.springframework.web.util.UriComponentsBuilder; * @author Joe Grandja * @since 0.4.0 */ -final class OidcClientRegistrationConverter implements Converter { +final class RegisteredClientOidcClientRegistrationConverter implements Converter { @Override public OidcClientRegistration convert(RegisteredClient registeredClient) { diff --git a/oauth2-authorization-server/src/test/java/org/springframework/security/oauth2/server/authorization/oidc/authentication/OidcClientRegistrationAuthenticationProviderTests.java b/oauth2-authorization-server/src/test/java/org/springframework/security/oauth2/server/authorization/oidc/authentication/OidcClientRegistrationAuthenticationProviderTests.java index e471bd8a..e5b6210b 100644 --- a/oauth2-authorization-server/src/test/java/org/springframework/security/oauth2/server/authorization/oidc/authentication/OidcClientRegistrationAuthenticationProviderTests.java +++ b/oauth2-authorization-server/src/test/java/org/springframework/security/oauth2/server/authorization/oidc/authentication/OidcClientRegistrationAuthenticationProviderTests.java @@ -134,6 +134,13 @@ public class OidcClientRegistrationAuthenticationProviderTests { .withMessage("tokenGenerator cannot be null"); } + @Test + public void setRegisteredClientConverterWhenNullThenThrowIllegalArgumentException() { + assertThatIllegalArgumentException() + .isThrownBy(() -> this.authenticationProvider.setRegisteredClientConverter(null)) + .withMessage("registeredClientConverter cannot be null"); + } + @Test public void supportsWhenTypeOidcClientRegistrationAuthenticationTokenThenReturnTrue() { assertThat(this.authenticationProvider.supports(OidcClientRegistrationAuthenticationToken.class)).isTrue();