|
15 | 15 | */
|
16 | 16 | package sample.registration;
|
17 | 17 |
|
| 18 | +import java.util.HashMap; |
| 19 | +import java.util.List; |
| 20 | +import java.util.Map; |
| 21 | +import java.util.function.Consumer; |
| 22 | +import java.util.function.Function; |
| 23 | +import java.util.stream.Collectors; |
| 24 | + |
18 | 25 | import org.springframework.core.convert.converter.Converter;
|
19 | 26 | import org.springframework.security.authentication.AuthenticationProvider;
|
20 | 27 | import org.springframework.security.oauth2.server.authorization.client.RegisteredClient;
|
|
26 | 33 | import org.springframework.security.oauth2.server.authorization.settings.ClientSettings;
|
27 | 34 | import org.springframework.util.CollectionUtils;
|
28 | 35 |
|
29 |
| -import java.util.HashMap; |
30 |
| -import java.util.List; |
31 |
| -import java.util.Map; |
32 |
| -import java.util.function.Consumer; |
33 |
| -import java.util.function.Function; |
34 |
| -import java.util.stream.Collectors; |
| 36 | +public class CustomClientMetadataConfig { |
35 | 37 |
|
36 |
| -public class CustomMetadataConfig { |
37 |
| - public static Consumer<List<AuthenticationProvider>> registeredClientConverters() { |
38 |
| - List<String> customClientMetadata = List.of("logo_uri", "contacts"); // <1> |
| 38 | + public static Consumer<List<AuthenticationProvider>> configureCustomClientMetadataConverters() { // <1> |
| 39 | + List<String> customClientMetadata = List.of("logo_uri", "contacts"); // <2> |
39 | 40 |
|
40 |
| - return authenticationProviders -> // <2> |
41 |
| - { |
42 |
| - CustomRegisteredClientConverter registeredClientConverter = new CustomRegisteredClientConverter(customClientMetadata); |
43 |
| - CustomClientRegistrationConverter clientRegistrationConverter = new CustomClientRegistrationConverter(customClientMetadata); |
| 41 | + return (authenticationProviders) -> { |
| 42 | + CustomRegisteredClientConverter registeredClientConverter = |
| 43 | + new CustomRegisteredClientConverter(customClientMetadata); |
| 44 | + CustomClientRegistrationConverter clientRegistrationConverter = |
| 45 | + new CustomClientRegistrationConverter(customClientMetadata); |
44 | 46 |
|
45 |
| - authenticationProviders.forEach(authenticationProvider -> { |
46 |
| - if (authenticationProvider instanceof OidcClientRegistrationAuthenticationProvider provider) { // <3> |
47 |
| - provider.setRegisteredClientConverter(registeredClientConverter); // <4> |
48 |
| - provider.setClientRegistrationConverter(clientRegistrationConverter); // <5> |
| 47 | + authenticationProviders.forEach((authenticationProvider) -> { |
| 48 | + if (authenticationProvider instanceof OidcClientRegistrationAuthenticationProvider provider) { |
| 49 | + provider.setRegisteredClientConverter(registeredClientConverter); // <3> |
| 50 | + provider.setClientRegistrationConverter(clientRegistrationConverter); // <4> |
49 | 51 | }
|
50 |
| - |
51 | 52 | if (authenticationProvider instanceof OidcClientConfigurationAuthenticationProvider provider) {
|
52 |
| - provider.setClientRegistrationConverter(clientRegistrationConverter); // <6> |
| 53 | + provider.setClientRegistrationConverter(clientRegistrationConverter); // <5> |
53 | 54 | }
|
54 | 55 | });
|
55 | 56 | };
|
56 | 57 | }
|
57 | 58 |
|
58 |
| - static class CustomRegisteredClientConverter implements Converter<OidcClientRegistration, RegisteredClient> { // <7> |
59 |
| - private final List<String> customMetadata; |
| 59 | + private static class CustomRegisteredClientConverter |
| 60 | + implements Converter<OidcClientRegistration, RegisteredClient> { |
60 | 61 |
|
| 62 | + private final List<String> customClientMetadata; |
61 | 63 | private final OidcClientRegistrationRegisteredClientConverter delegate;
|
62 | 64 |
|
63 |
| - CustomRegisteredClientConverter(List<String> customMetadata) { |
64 |
| - this.customMetadata = customMetadata; |
| 65 | + private CustomRegisteredClientConverter(List<String> customClientMetadata) { |
| 66 | + this.customClientMetadata = customClientMetadata; |
65 | 67 | this.delegate = new OidcClientRegistrationRegisteredClientConverter();
|
66 | 68 | }
|
67 | 69 |
|
| 70 | + @Override |
68 | 71 | public RegisteredClient convert(OidcClientRegistration clientRegistration) {
|
69 |
| - RegisteredClient convertedClient = delegate.convert(clientRegistration); |
70 |
| - ClientSettings.Builder clientSettingsBuilder = ClientSettings |
71 |
| - .withSettings(convertedClient.getClientSettings().getSettings()); |
72 |
| - |
73 |
| - if (!CollectionUtils.isEmpty(this.customMetadata)) { |
| 72 | + RegisteredClient registeredClient = this.delegate.convert(clientRegistration); |
| 73 | + ClientSettings.Builder clientSettingsBuilder = ClientSettings.withSettings( |
| 74 | + registeredClient.getClientSettings().getSettings()); |
| 75 | + if (!CollectionUtils.isEmpty(this.customClientMetadata)) { |
74 | 76 | clientRegistration.getClaims().forEach((claim, value) -> {
|
75 |
| - if (this.customMetadata.contains(claim)) { |
| 77 | + if (this.customClientMetadata.contains(claim)) { |
76 | 78 | clientSettingsBuilder.setting(claim, value);
|
77 | 79 | }
|
78 | 80 | });
|
79 | 81 | }
|
80 | 82 |
|
81 |
| - return RegisteredClient.from(convertedClient).clientSettings(clientSettingsBuilder.build()).build(); |
| 83 | + return RegisteredClient.from(registeredClient) |
| 84 | + .clientSettings(clientSettingsBuilder.build()) |
| 85 | + .build(); |
82 | 86 | }
|
83 | 87 | }
|
84 | 88 |
|
85 |
| - static class CustomClientRegistrationConverter implements Converter<RegisteredClient, OidcClientRegistration> { // <8> |
86 |
| - private final List<String> customMetadata; |
| 89 | + private static class CustomClientRegistrationConverter |
| 90 | + implements Converter<RegisteredClient, OidcClientRegistration> { |
87 | 91 |
|
| 92 | + private final List<String> customClientMetadata; |
88 | 93 | private final RegisteredClientOidcClientRegistrationConverter delegate;
|
89 | 94 |
|
90 |
| - CustomClientRegistrationConverter(List<String> customMetadata) { |
91 |
| - this.customMetadata = customMetadata; |
| 95 | + private CustomClientRegistrationConverter(List<String> customClientMetadata) { |
| 96 | + this.customClientMetadata = customClientMetadata; |
92 | 97 | this.delegate = new RegisteredClientOidcClientRegistrationConverter();
|
93 | 98 | }
|
94 | 99 |
|
| 100 | + @Override |
95 | 101 | public OidcClientRegistration convert(RegisteredClient registeredClient) {
|
96 |
| - var clientRegistration = delegate.convert(registeredClient); |
| 102 | + OidcClientRegistration clientRegistration = this.delegate.convert(registeredClient); |
97 | 103 | Map<String, Object> claims = new HashMap<>(clientRegistration.getClaims());
|
98 |
| - if (!CollectionUtils.isEmpty(customMetadata)) { |
| 104 | + if (!CollectionUtils.isEmpty(this.customClientMetadata)) { |
99 | 105 | ClientSettings clientSettings = registeredClient.getClientSettings();
|
100 |
| - |
101 |
| - claims.putAll(customMetadata.stream() |
102 |
| - .filter(metadatum -> clientSettings.getSetting(metadatum) != null) |
| 106 | + claims.putAll(this.customClientMetadata.stream() |
| 107 | + .filter(metadata -> clientSettings.getSetting(metadata) != null) |
103 | 108 | .collect(Collectors.toMap(Function.identity(), clientSettings::getSetting)));
|
104 | 109 | }
|
| 110 | + |
105 | 111 | return OidcClientRegistration.withClaims(claims).build();
|
106 | 112 | }
|
| 113 | + |
107 | 114 | }
|
108 | 115 |
|
109 | 116 | }
|
0 commit comments