Skip to content

Commit 2e8f074

Browse files
committed
mcp-server: expose the underlying oauth2 resource server configurer
Signed-off-by: Daniel Garnier-Moiroux <[email protected]>
1 parent 9c43a7d commit 2e8f074

File tree

1 file changed

+20
-0
lines changed

1 file changed

+20
-0
lines changed

mcp-server-security/src/main/java/org/springaicommunity/mcp/security/server/config/McpServerOAuth2Configurer.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,10 @@
2525
import org.springaicommunity.mcp.security.server.oauth2.metadata.OAuth2ProtectedResourceMetadataEndpointFilter;
2626
import org.springaicommunity.mcp.security.server.oauth2.metadata.ResourceIdentifier;
2727

28+
import org.springframework.security.config.Customizer;
2829
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
2930
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
31+
import org.springframework.security.config.annotation.web.configurers.oauth2.server.resource.OAuth2ResourceServerConfigurer;
3032
import org.springframework.security.oauth2.core.OAuth2TokenValidator;
3133
import org.springframework.security.oauth2.jwt.Jwt;
3234
import org.springframework.security.oauth2.jwt.JwtDecoder;
@@ -54,6 +56,9 @@ public class McpServerOAuth2Configurer extends AbstractHttpConfigurer<McpServerO
5456

5557
private boolean validateAudienceClaim = false;
5658

59+
private Customizer<OAuth2ResourceServerConfigurer<HttpSecurity>> oauth2ResourceServerCustomizer = Customizer
60+
.withDefaults();
61+
5762
public McpServerOAuth2Configurer authorizationServer(String issuerUri) {
5863
this.issuerUri = issuerUri;
5964
return this;
@@ -90,6 +95,20 @@ public McpServerOAuth2Configurer validateAudienceClaim(boolean validateAudienceC
9095
return this;
9196
}
9297

98+
/**
99+
* Customize the underlying Spring Security OAuth2 Resource Server configuration,
100+
* through a {@link OAuth2ResourceServerConfigurer}.
101+
* @param oauth2ResourceServerCustomizer a customizer of OAuth2 Resource Server.
102+
* Defaults to a no-op {@link Customizer#withDefaults()}.
103+
* @return The {@link McpServerOAuth2Configurer} for further configuration.
104+
*/
105+
private McpServerOAuth2Configurer oauth2ResourceServer(
106+
Customizer<OAuth2ResourceServerConfigurer<HttpSecurity>> oauth2ResourceServerCustomizer) {
107+
Assert.notNull(oauth2ResourceServerCustomizer, "oauth2ResourceServerCustomizer cannot be null");
108+
this.oauth2ResourceServerCustomizer = oauth2ResourceServerCustomizer;
109+
return this;
110+
}
111+
93112
@Override
94113
public void init(HttpSecurity http) throws Exception {
95114
Assert.notNull(this.issuerUri, "authorizationServer cannot be null");
@@ -107,6 +126,7 @@ public void init(HttpSecurity http) throws Exception {
107126
.oauth2ResourceServer(resourceServer -> {
108127
resourceServer.jwt(jwt -> jwt.decoder(getJwtDecoder(http)));
109128
resourceServer.authenticationEntryPoint(entryPoint);
129+
this.oauth2ResourceServerCustomizer.customize(resourceServer);
110130
})
111131
.addFilterBefore(protectedResourceMetadataEndpointFilter, AbstractPreAuthenticatedProcessingFilter.class);
112132
//@formatter:on

0 commit comments

Comments
 (0)