@ -16,7 +16,9 @@
@@ -16,7 +16,9 @@
package org.springframework.security.config.annotation.web.configurers.oauth2.server.authorization ;
import java.util.ArrayList ;
import java.util.LinkedHashMap ;
import java.util.List ;
import java.util.Map ;
import org.springframework.http.HttpMethod ;
import org.springframework.security.config.Customizer ;
@ -40,8 +42,7 @@ import org.springframework.security.web.util.matcher.RequestMatcher;
@@ -40,8 +42,7 @@ import org.springframework.security.web.util.matcher.RequestMatcher;
* @see OidcProviderConfigurationEndpointFilter
* /
public final class OidcConfigurer extends AbstractOAuth2Configurer {
private final OidcUserInfoEndpointConfigurer userInfoEndpointConfigurer ;
private OidcClientRegistrationEndpointConfigurer clientRegistrationEndpointConfigurer ;
private final Map < Class < ? extends AbstractOAuth2Configurer > , AbstractOAuth2Configurer > configurers = new LinkedHashMap < > ( ) ;
private RequestMatcher requestMatcher ;
/ * *
@ -49,7 +50,7 @@ public final class OidcConfigurer extends AbstractOAuth2Configurer {
@@ -49,7 +50,7 @@ public final class OidcConfigurer extends AbstractOAuth2Configurer {
* /
OidcConfigurer ( ObjectPostProcessor < Object > objectPostProcessor ) {
super ( objectPostProcessor ) ;
this . userInfoEndpointConfigurer = new OidcUserInfoEndpointConfigurer ( objectPostProcessor ) ;
addConfigurer ( OidcUserInfoEndpointConfigurer . class , new OidcUserInfoEndpointConfigurer ( objectPostProcessor ) ) ;
}
/ * *
@ -59,10 +60,14 @@ public final class OidcConfigurer extends AbstractOAuth2Configurer {
@@ -59,10 +60,14 @@ public final class OidcConfigurer extends AbstractOAuth2Configurer {
* @return the { @link OidcConfigurer } for further configuration
* /
public OidcConfigurer clientRegistrationEndpoint ( Customizer < OidcClientRegistrationEndpointConfigurer > clientRegistrationEndpointCustomizer ) {
if ( this . clientRegistrationEndpointConfigurer = = null ) {
this . clientRegistrationEndpointConfigurer = new OidcClientRegistrationEndpointConfigurer ( getObjectPostProcessor ( ) ) ;
OidcClientRegistrationEndpointConfigurer clientRegistrationEndpointConfigurer =
getConfigurer ( OidcClientRegistrationEndpointConfigurer . class ) ;
if ( clientRegistrationEndpointConfigurer = = null ) {
addConfigurer ( OidcClientRegistrationEndpointConfigurer . class ,
new OidcClientRegistrationEndpointConfigurer ( getObjectPostProcessor ( ) ) ) ;
clientRegistrationEndpointConfigurer = getConfigurer ( OidcClientRegistrationEndpointConfigurer . class ) ;
}
clientRegistrationEndpointCustomizer . customize ( this . clientRegistrationEndpointConfigurer ) ;
clientRegistrationEndpointCustomizer . customize ( clientRegistrationEndpointConfigurer ) ;
return this ;
}
@ -73,32 +78,40 @@ public final class OidcConfigurer extends AbstractOAuth2Configurer {
@@ -73,32 +78,40 @@ public final class OidcConfigurer extends AbstractOAuth2Configurer {
* @return the { @link OidcConfigurer } for further configuration
* /
public OidcConfigurer userInfoEndpoint ( Customizer < OidcUserInfoEndpointConfigurer > userInfoEndpointCustomizer ) {
userInfoEndpointCustomizer . customize ( this . userInfoEndpointConfigurer ) ;
userInfoEndpointCustomizer . customize ( getConfigurer ( OidcUserInfoEndpointConfigurer . class ) ) ;
return this ;
}
@Override
< B extends HttpSecurityBuilder < B > > void init ( B builder ) {
this . userInfoEndpointConfigurer . init ( builder ) ;
if ( this . clientRegistrationEndpointConfigurer ! = null ) {
this . clientRegistrationEndpointConfigurer . init ( builder ) ;
OidcUserInfoEndpointConfigurer userInfoEndpointConfigurer =
getConfigurer ( OidcUserInfoEndpointConfigurer . class ) ;
userInfoEndpointConfigurer . init ( builder ) ;
OidcClientRegistrationEndpointConfigurer clientRegistrationEndpointConfigurer =
getConfigurer ( OidcClientRegistrationEndpointConfigurer . class ) ;
if ( clientRegistrationEndpointConfigurer ! = null ) {
clientRegistrationEndpointConfigurer . init ( builder ) ;
}
List < RequestMatcher > requestMatchers = new ArrayList < > ( ) ;
requestMatchers . add ( new AntPathRequestMatcher (
"/.well-known/openid-configuration" , HttpMethod . GET . name ( ) ) ) ;
requestMatchers . add ( this . userInfoEndpointConfigurer . getRequestMatcher ( ) ) ;
if ( this . clientRegistrationEndpointConfigurer ! = null ) {
requestMatchers . add ( this . clientRegistrationEndpointConfigurer . getRequestMatcher ( ) ) ;
requestMatchers . add ( userInfoEndpointConfigurer . getRequestMatcher ( ) ) ;
if ( clientRegistrationEndpointConfigurer ! = null ) {
requestMatchers . add ( clientRegistrationEndpointConfigurer . getRequestMatcher ( ) ) ;
}
this . requestMatcher = new OrRequestMatcher ( requestMatchers ) ;
}
@Override
< B extends HttpSecurityBuilder < B > > void configure ( B builder ) {
this . userInfoEndpointConfigurer . configure ( builder ) ;
if ( this . clientRegistrationEndpointConfigurer ! = null ) {
this . clientRegistrationEndpointConfigurer . configure ( builder ) ;
OidcUserInfoEndpointConfigurer userInfoEndpointConfigurer =
getConfigurer ( OidcUserInfoEndpointConfigurer . class ) ;
userInfoEndpointConfigurer . configure ( builder ) ;
OidcClientRegistrationEndpointConfigurer clientRegistrationEndpointConfigurer =
getConfigurer ( OidcClientRegistrationEndpointConfigurer . class ) ;
if ( clientRegistrationEndpointConfigurer ! = null ) {
clientRegistrationEndpointConfigurer . configure ( builder ) ;
}
ProviderSettings providerSettings = OAuth2ConfigurerUtils . getProviderSettings ( builder ) ;
@ -112,4 +125,13 @@ public final class OidcConfigurer extends AbstractOAuth2Configurer {
@@ -112,4 +125,13 @@ public final class OidcConfigurer extends AbstractOAuth2Configurer {
return this . requestMatcher ;
}
@SuppressWarnings ( "unchecked" )
< T > T getConfigurer ( Class < T > type ) {
return ( T ) this . configurers . get ( type ) ;
}
private < T extends AbstractOAuth2Configurer > void addConfigurer ( Class < T > configurerType , T configurer ) {
this . configurers . put ( configurerType , configurer ) ;
}
}