Skip to content

Commit 05f1371

Browse files
committed
Polish gh-1326
1 parent 3de6a7d commit 05f1371

File tree

6 files changed

+66
-60
lines changed

6 files changed

+66
-60
lines changed

oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/oidc/authentication/OidcClientConfigurationAuthenticationProvider.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@
5353
* @see OAuth2AuthorizationService
5454
* @see OidcClientRegistrationAuthenticationToken
5555
* @see OidcClientRegistrationAuthenticationProvider
56-
* @see RegisteredClientOidcClientRegistrationConverter
5756
* @see <a href="https://openid.net/specs/openid-connect-registration-1_0.html#ClientConfigurationEndpoint">4. Client Configuration Endpoint</a>
5857
*/
5958
public final class OidcClientConfigurationAuthenticationProvider implements AuthenticationProvider {
@@ -79,9 +78,9 @@ public OidcClientConfigurationAuthenticationProvider(RegisteredClientRepository
7978
}
8079

8180
/**
82-
* Sets the {@link Converter} used for converting an {@link RegisteredClient} to a {@link OidcClientRegistration}.
81+
* Sets the {@link Converter} used for converting a {@link RegisteredClient} to an {@link OidcClientRegistration}.
8382
*
84-
* @param clientRegistrationConverter the {@link Converter} used for converting an {@link RegisteredClient} to a {@link OidcClientRegistration}
83+
* @param clientRegistrationConverter the {@link Converter} used for converting a {@link RegisteredClient} to an {@link OidcClientRegistration}
8584
* @since 1.2.0
8685
*/
8786
public void setClientRegistrationConverter(Converter<RegisteredClient, OidcClientRegistration> clientRegistrationConverter) {

oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/oidc/authentication/OidcClientRegistrationAuthenticationProvider.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -168,9 +168,9 @@ public void setRegisteredClientConverter(Converter<OidcClientRegistration, Regis
168168
}
169169

170170
/**
171-
* Sets the {@link Converter} used for converting an {@link RegisteredClient} to a {@link OidcClientRegistration}.
171+
* Sets the {@link Converter} used for converting a {@link RegisteredClient} to an {@link OidcClientRegistration}.
172172
*
173-
* @param clientRegistrationConverter the {@link Converter} used for converting an {@link RegisteredClient} to a {@link OidcClientRegistration}
173+
* @param clientRegistrationConverter the {@link Converter} used for converting a {@link RegisteredClient} to an {@link OidcClientRegistration}
174174
* @since 1.2.0
175175
*/
176176
public void setClientRegistrationConverter(Converter<RegisteredClient, OidcClientRegistration> clientRegistrationConverter) {

oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/oidc/converter/OidcClientRegistrationRegisteredClientConverter.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@
1515
*/
1616
package org.springframework.security.oauth2.server.authorization.oidc.converter;
1717

18+
import java.time.Instant;
19+
import java.util.Base64;
20+
import java.util.UUID;
21+
1822
import org.springframework.core.convert.converter.Converter;
1923
import org.springframework.security.crypto.keygen.Base64StringKeyGenerator;
2024
import org.springframework.security.crypto.keygen.StringKeyGenerator;
@@ -29,11 +33,9 @@
2933
import org.springframework.security.oauth2.server.authorization.settings.TokenSettings;
3034
import org.springframework.util.CollectionUtils;
3135

32-
import java.time.Instant;
33-
import java.util.Base64;
34-
import java.util.UUID;
35-
3636
/**
37+
* A {@link Converter} that converts the provided {@link OidcClientRegistration} to a {@link RegisteredClient}.
38+
*
3739
* @author Joe Grandja
3840
* @author Dmitriy Dubson
3941
* @since 1.2.0

oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/oidc/converter/RegisteredClientOidcClientRegistrationConverter.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828
import org.springframework.web.util.UriComponentsBuilder;
2929

3030
/**
31+
* A {@link Converter} that converts the provided {@link RegisteredClient} to an {@link OidcClientRegistration}.
32+
*
3133
* @author Joe Grandja
3234
* @since 1.2.0
3335
*/

oauth2-authorization-server/src/test/java/org/springframework/security/oauth2/server/authorization/config/annotation/web/configurers/OidcClientRegistrationTests.java

Lines changed: 46 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,12 @@
2222
import java.util.List;
2323
import java.util.Map;
2424
import java.util.function.Consumer;
25-
import java.util.function.Function;
26-
import java.util.stream.Collectors;
25+
26+
import jakarta.servlet.http.HttpServletResponse;
2727

2828
import com.nimbusds.jose.jwk.JWKSet;
2929
import com.nimbusds.jose.jwk.source.JWKSource;
3030
import com.nimbusds.jose.proc.SecurityContext;
31-
import jakarta.servlet.http.HttpServletResponse;
3231
import okhttp3.mockwebserver.MockResponse;
3332
import okhttp3.mockwebserver.MockWebServer;
3433
import org.junit.jupiter.api.AfterAll;
@@ -588,7 +587,7 @@ public SecurityFilterChain authorizationServerSecurityFilterChain(HttpSecurity h
588587
oidc
589588
.clientRegistrationEndpoint(clientRegistration ->
590589
clientRegistration
591-
.authenticationProviders(configureRegisteredClientConverters())
590+
.authenticationProviders(configureClientRegistrationConverters())
592591
)
593592
);
594593
RequestMatcher endpointsMatcher = authorizationServerConfigurer.getEndpointsMatcher();
@@ -607,15 +606,14 @@ public SecurityFilterChain authorizationServerSecurityFilterChain(HttpSecurity h
607606
}
608607
// @formatter:on
609608

610-
private Consumer<List<AuthenticationProvider>> configureRegisteredClientConverters() {
609+
private Consumer<List<AuthenticationProvider>> configureClientRegistrationConverters() {
611610
// @formatter:off
612611
return (authenticationProviders) ->
613612
authenticationProviders.forEach(authenticationProvider -> {
614-
List<String> customClientMetadata = List.of("custom-metadata-name-1", "custom-metadata-name-2");
615-
613+
List<String> supportedCustomClientMetadata = List.of("custom-metadata-name-1", "custom-metadata-name-2");
616614
if (authenticationProvider instanceof OidcClientRegistrationAuthenticationProvider provider) {
617-
provider.setRegisteredClientConverter(new CustomRegisteredClientConverter(customClientMetadata));
618-
provider.setClientRegistrationConverter(new CustomClientRegistrationConverter(customClientMetadata));
615+
provider.setRegisteredClientConverter(new CustomRegisteredClientConverter(supportedCustomClientMetadata));
616+
provider.setClientRegistrationConverter(new CustomClientRegistrationConverter(supportedCustomClientMetadata));
619617
}
620618
});
621619
// @formatter:on
@@ -695,54 +693,59 @@ PasswordEncoder passwordEncoder() {
695693

696694
}
697695

698-
static class CustomClientRegistrationConverter implements Converter<RegisteredClient, OidcClientRegistration> {
699-
private final List<String> customMetadata;
696+
private static class CustomRegisteredClientConverter implements Converter<OidcClientRegistration, RegisteredClient> {
697+
private final OidcClientRegistrationRegisteredClientConverter delegate =
698+
new OidcClientRegistrationRegisteredClientConverter();
699+
private final List<String> supportedCustomClientMetadata;
700700

701-
private final RegisteredClientOidcClientRegistrationConverter delegate;
702-
703-
CustomClientRegistrationConverter(List<String> customMetadata) {
704-
this.customMetadata = customMetadata;
705-
this.delegate = new RegisteredClientOidcClientRegistrationConverter();
701+
private CustomRegisteredClientConverter(List<String> supportedCustomClientMetadata) {
702+
this.supportedCustomClientMetadata = supportedCustomClientMetadata;
706703
}
707704

708-
public OidcClientRegistration convert(RegisteredClient registeredClient) {
709-
var clientRegistration = delegate.convert(registeredClient);
710-
Map<String, Object> claims = new HashMap<>(clientRegistration.getClaims());
711-
if (!CollectionUtils.isEmpty(customMetadata)) {
712-
ClientSettings clientSettings = registeredClient.getClientSettings();
713-
714-
claims.putAll(customMetadata.stream()
715-
.filter(metadatum -> clientSettings.getSetting(metadatum) != null)
716-
.collect(Collectors.toMap(Function.identity(), clientSettings::getSetting)));
705+
@Override
706+
public RegisteredClient convert(OidcClientRegistration clientRegistration) {
707+
RegisteredClient registeredClient = this.delegate.convert(clientRegistration);
708+
709+
ClientSettings.Builder clientSettingsBuilder = ClientSettings
710+
.withSettings(registeredClient.getClientSettings().getSettings());
711+
if (!CollectionUtils.isEmpty(this.supportedCustomClientMetadata)) {
712+
clientRegistration.getClaims().forEach((claim, value) -> {
713+
if (this.supportedCustomClientMetadata.contains(claim)) {
714+
clientSettingsBuilder.setting(claim, value);
715+
}
716+
});
717717
}
718-
return OidcClientRegistration.withClaims(claims).build();
718+
719+
return RegisteredClient.from(registeredClient).clientSettings(clientSettingsBuilder.build()).build();
719720
}
720-
}
721721

722-
static class CustomRegisteredClientConverter implements Converter<OidcClientRegistration, RegisteredClient> {
723-
private final List<String> customMetadata;
722+
}
724723

725-
private final OidcClientRegistrationRegisteredClientConverter delegate;
724+
private static class CustomClientRegistrationConverter implements Converter<RegisteredClient, OidcClientRegistration> {
725+
private final RegisteredClientOidcClientRegistrationConverter delegate =
726+
new RegisteredClientOidcClientRegistrationConverter();
727+
private final List<String> supportedCustomClientMetadata;
726728

727-
CustomRegisteredClientConverter(List<String> customMetadata) {
728-
this.customMetadata = customMetadata;
729-
this.delegate = new OidcClientRegistrationRegisteredClientConverter();
729+
private CustomClientRegistrationConverter(List<String> supportedCustomClientMetadata) {
730+
this.supportedCustomClientMetadata = supportedCustomClientMetadata;
730731
}
731732

732-
public RegisteredClient convert(OidcClientRegistration clientRegistration) {
733-
RegisteredClient convertedClient = delegate.convert(clientRegistration);
734-
ClientSettings.Builder clientSettingsBuilder = ClientSettings
735-
.withSettings(convertedClient.getClientSettings().getSettings());
736-
737-
if (!CollectionUtils.isEmpty(this.customMetadata)) {
738-
clientRegistration.getClaims().forEach((claim, value) -> {
739-
if (this.customMetadata.contains(claim)) {
740-
clientSettingsBuilder.setting(claim, value);
733+
@Override
734+
public OidcClientRegistration convert(RegisteredClient registeredClient) {
735+
OidcClientRegistration clientRegistration = this.delegate.convert(registeredClient);
736+
737+
Map<String, Object> clientMetadata = new HashMap<>(clientRegistration.getClaims());
738+
if (!CollectionUtils.isEmpty(this.supportedCustomClientMetadata)) {
739+
Map<String, Object> clientSettings = registeredClient.getClientSettings().getSettings();
740+
this.supportedCustomClientMetadata.forEach((customClaim) -> {
741+
if (clientSettings.containsKey(customClaim)) {
742+
clientMetadata.put(customClaim, clientSettings.get(customClaim));
741743
}
742744
});
743745
}
744746

745-
return RegisteredClient.from(convertedClient).clientSettings(clientSettingsBuilder.build()).build();
747+
return OidcClientRegistration.withClaims(clientMetadata).build();
746748
}
747749
}
750+
748751
}

oauth2-authorization-server/src/test/java/org/springframework/security/oauth2/server/authorization/oidc/authentication/OidcClientConfigurationAuthenticationProviderTests.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2020-2022 the original author or authors.
2+
* Copyright 2020-2023 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -111,6 +111,13 @@ public void supportsWhenTypeOidcClientRegistrationAuthenticationTokenThenReturnT
111111
assertThat(this.authenticationProvider.supports(OidcClientRegistrationAuthenticationToken.class)).isTrue();
112112
}
113113

114+
@Test
115+
public void setClientRegistrationConverterWhenNullThenThrowIllegalArgumentException() {
116+
assertThatIllegalArgumentException()
117+
.isThrownBy(() -> this.authenticationProvider.setClientRegistrationConverter(null))
118+
.withMessage("clientRegistrationConverter cannot be null");
119+
}
120+
114121
@Test
115122
public void authenticateWhenPrincipalNotOAuth2TokenAuthenticationTokenThenThrowOAuth2AuthenticationException() {
116123
TestingAuthenticationToken principal = new TestingAuthenticationToken("principal", "credentials");
@@ -378,13 +385,6 @@ public void authenticateWhenValidAccessTokenThenReturnClientRegistration() {
378385
assertThat(clientRegistrationResult.getRegistrationAccessToken()).isNull();
379386
}
380387

381-
@Test
382-
public void setClientRegistrationConverterWhenNullThenThrowIllegalArgumentException() {
383-
assertThatIllegalArgumentException()
384-
.isThrownBy(() -> this.authenticationProvider.setClientRegistrationConverter(null))
385-
.withMessage("clientRegistrationConverter cannot be null");
386-
}
387-
388388
private static Jwt createJwtClientConfiguration() {
389389
return createJwt(Collections.singleton("client.read"));
390390
}

0 commit comments

Comments
 (0)