46
46
import org .springframework .security .oauth2 .server .authorization .authentication .OAuth2TokenRevocationAuthenticationProvider ;
47
47
import org .springframework .security .oauth2 .server .authorization .client .RegisteredClientRepository ;
48
48
import org .springframework .security .oauth2 .server .authorization .config .ProviderSettings ;
49
+ import org .springframework .security .oauth2 .server .authorization .oidc .web .OidcClientRegistrationEndpointFilter ;
49
50
import org .springframework .security .oauth2 .server .authorization .oidc .web .OidcProviderConfigurationEndpointFilter ;
50
51
import org .springframework .security .oauth2 .server .authorization .web .NimbusJwkSetEndpointFilter ;
51
52
import org .springframework .security .oauth2 .server .authorization .web .OAuth2AuthorizationEndpointFilter ;
80
81
* @see NimbusJwkSetEndpointFilter
81
82
* @see OidcProviderConfigurationEndpointFilter
82
83
* @see OAuth2ClientAuthenticationFilter
84
+ * @see OidcClientRegistrationEndpointFilter
83
85
*/
84
86
public final class OAuth2AuthorizationServerConfigurer <B extends HttpSecurityBuilder <B >>
85
87
extends AbstractHttpConfigurer <OAuth2AuthorizationServerConfigurer <B >, B > {
@@ -89,12 +91,14 @@ public final class OAuth2AuthorizationServerConfigurer<B extends HttpSecurityBui
89
91
private RequestMatcher tokenRevocationEndpointMatcher ;
90
92
private RequestMatcher jwkSetEndpointMatcher ;
91
93
private RequestMatcher oidcProviderConfigurationEndpointMatcher ;
94
+ private RequestMatcher oidcClientRegistrationEndpointMatcher ;
92
95
private final RequestMatcher endpointsMatcher = (request ) ->
93
96
this .authorizationEndpointMatcher .matches (request ) ||
94
97
this .tokenEndpointMatcher .matches (request ) ||
95
98
this .tokenRevocationEndpointMatcher .matches (request ) ||
96
99
this .jwkSetEndpointMatcher .matches (request ) ||
97
- this .oidcProviderConfigurationEndpointMatcher .matches (request );
100
+ this .oidcProviderConfigurationEndpointMatcher .matches (request ) ||
101
+ this .oidcClientRegistrationEndpointMatcher .matches (request );
98
102
99
103
/**
100
104
* Sets the repository of registered clients.
@@ -217,6 +221,12 @@ public void configure(B builder) {
217
221
builder .addFilterBefore (postProcess (oidcProviderConfigurationEndpointFilter ), AbstractPreAuthenticatedProcessingFilter .class );
218
222
}
219
223
224
+ RegisteredClientRepository registeredClientRepository = getRegisteredClientRepository (builder );
225
+
226
+ OidcClientRegistrationEndpointFilter oidcClientRegistrationEndpointFilter =
227
+ new OidcClientRegistrationEndpointFilter (registeredClientRepository );
228
+ builder .addFilterBefore (postProcess (oidcClientRegistrationEndpointFilter ), AbstractPreAuthenticatedProcessingFilter .class );
229
+
220
230
JWKSource <SecurityContext > jwkSource = getJwkSource (builder );
221
231
NimbusJwkSetEndpointFilter jwkSetEndpointFilter = new NimbusJwkSetEndpointFilter (
222
232
jwkSource ,
@@ -235,7 +245,7 @@ public void configure(B builder) {
235
245
236
246
OAuth2AuthorizationEndpointFilter authorizationEndpointFilter =
237
247
new OAuth2AuthorizationEndpointFilter (
238
- getRegisteredClientRepository ( builder ) ,
248
+ registeredClientRepository ,
239
249
getAuthorizationService (builder ),
240
250
providerSettings .authorizationEndpoint ());
241
251
builder .addFilterBefore (postProcess (authorizationEndpointFilter ), AbstractPreAuthenticatedProcessingFilter .class );
@@ -269,6 +279,9 @@ private void initEndpointMatchers(ProviderSettings providerSettings) {
269
279
providerSettings .jwkSetEndpoint (), HttpMethod .GET .name ());
270
280
this .oidcProviderConfigurationEndpointMatcher = new AntPathRequestMatcher (
271
281
OidcProviderConfigurationEndpointFilter .DEFAULT_OIDC_PROVIDER_CONFIGURATION_ENDPOINT_URI , HttpMethod .GET .name ());
282
+ this .oidcClientRegistrationEndpointMatcher = new AntPathRequestMatcher (
283
+ OidcClientRegistrationEndpointFilter .DEFAULT_OIDC_CLIENT_REGISTRATION_ENDPOINT ,
284
+ HttpMethod .POST .name ());
272
285
}
273
286
274
287
private static void validateProviderSettings (ProviderSettings providerSettings ) {
0 commit comments