@ -22,13 +22,12 @@ import java.util.HashMap;
@@ -22,13 +22,12 @@ import java.util.HashMap;
import java.util.List ;
import java.util.Map ;
import java.util.function.Consumer ;
import java.util.function.Function ;
import java.util.stream.Collectors ;
import jakarta.servlet.http.HttpServletResponse ;
import com.nimbusds.jose.jwk.JWKSet ;
import com.nimbusds.jose.jwk.source.JWKSource ;
import com.nimbusds.jose.proc.SecurityContext ;
import jakarta.servlet.http.HttpServletResponse ;
import okhttp3.mockwebserver.MockResponse ;
import okhttp3.mockwebserver.MockWebServer ;
import org.junit.jupiter.api.AfterAll ;
@ -588,7 +587,7 @@ public class OidcClientRegistrationTests {
@@ -588,7 +587,7 @@ public class OidcClientRegistrationTests {
oidc
. clientRegistrationEndpoint ( clientRegistration - >
clientRegistration
. authenticationProviders ( configureRegisteredClient Converters ( ) )
. authenticationProviders ( configureClientRegistration Converters ( ) )
)
) ;
RequestMatcher endpointsMatcher = authorizationServerConfigurer . getEndpointsMatcher ( ) ;
@ -607,15 +606,14 @@ public class OidcClientRegistrationTests {
@@ -607,15 +606,14 @@ public class OidcClientRegistrationTests {
}
// @formatter:on
private Consumer < List < AuthenticationProvider > > configureRegisteredClient Converters ( ) {
private Consumer < List < AuthenticationProvider > > configureClientRegistration Converters ( ) {
// @formatter:off
return ( authenticationProviders ) - >
authenticationProviders . forEach ( authenticationProvider - > {
List < String > customClientMetadata = List . of ( "custom-metadata-name-1" , "custom-metadata-name-2" ) ;
List < String > supportedCustomClientMetadata = List . of ( "custom-metadata-name-1" , "custom-metadata-name-2" ) ;
if ( authenticationProvider instanceof OidcClientRegistrationAuthenticationProvider provider ) {
provider . setRegisteredClientConverter ( new CustomRegisteredClientConverter ( c ustomClientMetadata) ) ;
provider . setClientRegistrationConverter ( new CustomClientRegistrationConverter ( c ustomClientMetadata) ) ;
provider . setRegisteredClientConverter ( new CustomRegisteredClientConverter ( supportedC ustomClientMetadata) ) ;
provider . setClientRegistrationConverter ( new CustomClientRegistrationConverter ( supportedC ustomClientMetadata) ) ;
}
} ) ;
// @formatter:on
@ -695,54 +693,59 @@ public class OidcClientRegistrationTests {
@@ -695,54 +693,59 @@ public class OidcClientRegistrationTests {
}
static class CustomClientRegistrationConverter implements Converter < RegisteredClient , OidcClientRegistration > {
private final List < String > customMetadata ;
private static class CustomRegisteredClientConverter implements Converter < OidcClientRegistration , RegisteredClient > {
private final OidcClientRegistrationRegisteredClientConverter delegate =
new OidcClientRegistrationRegisteredClientConverter ( ) ;
private final List < String > supportedCustomClientMetadata ;
private final RegisteredClientOidcClientRegistrationConverter delegate ;
CustomClientRegistrationConverter ( List < String > customMetadata ) {
this . customMetadata = customMetadata ;
this . delegate = new RegisteredClientOidcClientRegistrationConverter ( ) ;
private CustomRegisteredClientConverter ( List < String > supportedCustomClientMetadata ) {
this . supportedCustomClientMetadata = supportedCustomClientMetadata ;
}
public OidcClientRegistration convert ( RegisteredClient registeredClient ) {
var clientRegistration = delegate . convert ( registeredClient ) ;
Map < String , Object > claims = new HashMap < > ( clientRegistration . getClaims ( ) ) ;
if ( ! CollectionUtils . isEmpty ( customMetadata ) ) {
ClientSettings clientSettings = registeredClient . getClientSettings ( ) ;
claims . putAll ( customMetadata . stream ( )
. filter ( metadatum - > clientSettings . getSetting ( metadatum ) ! = null )
. collect ( Collectors . toMap ( Function . identity ( ) , clientSettings : : getSetting ) ) ) ;
@Override
public RegisteredClient convert ( OidcClientRegistration clientRegistration ) {
RegisteredClient registeredClient = this . delegate . convert ( clientRegistration ) ;
ClientSettings . Builder clientSettingsBuilder = ClientSettings
. withSettings ( registeredClient . getClientSettings ( ) . getSettings ( ) ) ;
if ( ! CollectionUtils . isEmpty ( this . supportedCustomClientMetadata ) ) {
clientRegistration . getClaims ( ) . forEach ( ( claim , value ) - > {
if ( this . supportedCustomClientMetadata . contains ( claim ) ) {
clientSettingsBuilder . setting ( claim , value ) ;
}
} ) ;
}
return OidcClientRegistration . withClaims ( claims ) . build ( ) ;
return RegisteredClient . from ( registeredClient ) . clientSettings ( clientSettingsBuilder . build ( ) ) . build ( ) ;
}
}
static class CustomRegisteredClientConverter implements Converter < OidcClientRegistration , RegisteredClient > {
private final List < String > customMetadata ;
}
private final OidcClientRegistrationRegisteredClientConverter delegate ;
private static class CustomClientRegistrationConverter implements Converter < RegisteredClient , OidcClientRegistration > {
private final RegisteredClientOidcClientRegistrationConverter delegate =
new RegisteredClientOidcClientRegistrationConverter ( ) ;
private final List < String > supportedCustomClientMetadata ;
CustomRegisteredClientConverter ( List < String > customMetadata ) {
this . customMetadata = customMetadata ;
this . delegate = new OidcClientRegistrationRegisteredClientConverter ( ) ;
private CustomClientRegistrationConverter ( List < String > supportedCustomClientMetadata ) {
this . supportedCustomClientMetadata = supportedCustomClientMetadata ;
}
public RegisteredClient convert ( OidcClientRegistration clientRegistration ) {
RegisteredClient convertedClient = delegate . convert ( clientRegistration ) ;
ClientSettings . Builder clientSettingsBuilder = ClientSettings
. withSettings ( convertedClient . getClientSettings ( ) . getSettings ( ) ) ;
if ( ! CollectionUtils . isEmpty ( this . customMetadata ) ) {
clientRegistration . getClaims ( ) . forEach ( ( claim , value ) - > {
if ( this . customMetadata . contains ( claim ) ) {
clientSettingsBuilder . setting ( claim , value ) ;
@Override
public OidcClientRegistration convert ( RegisteredClient registeredClient ) {
OidcClientRegistration clientRegistration = this . delegate . convert ( registeredClient ) ;
Map < String , Object > clientMetadata = new HashMap < > ( clientRegistration . getClaims ( ) ) ;
if ( ! CollectionUtils . isEmpty ( this . supportedCustomClientMetadata ) ) {
Map < String , Object > clientSettings = registeredClient . getClientSettings ( ) . getSettings ( ) ;
this . supportedCustomClientMetadata . forEach ( ( customClaim ) - > {
if ( clientSettings . containsKey ( customClaim ) ) {
clientMetadata . put ( customClaim , clientSettings . get ( customClaim ) ) ;
}
} ) ;
}
return RegisteredClient . from ( convertedClient ) . clientSettings ( clientSettingsBuilder . build ( ) ) . build ( ) ;
return OidcClientRegistration . withClaims ( clientMetadata ) . build ( ) ;
}
}
}