From d0bb94b8874367d9d1c25fb150fb7be5152b259d Mon Sep 17 00:00:00 2001 From: Fang Xia Date: Sat, 19 Mar 2022 22:53:12 +0800 Subject: [PATCH] Enhance validation for configured issuer Closes gh-649 --- .../OAuth2AuthorizationServerConfigurer.java | 8 +- .../server/authorization/OidcTests.java | 85 +++++++++++++++++++ 2 files changed, 92 insertions(+), 1 deletion(-) diff --git a/oauth2-authorization-server/src/main/java/org/springframework/security/config/annotation/web/configurers/oauth2/server/authorization/OAuth2AuthorizationServerConfigurer.java b/oauth2-authorization-server/src/main/java/org/springframework/security/config/annotation/web/configurers/oauth2/server/authorization/OAuth2AuthorizationServerConfigurer.java index bcfccb63..8186c4d3 100644 --- a/oauth2-authorization-server/src/main/java/org/springframework/security/config/annotation/web/configurers/oauth2/server/authorization/OAuth2AuthorizationServerConfigurer.java +++ b/oauth2-authorization-server/src/main/java/org/springframework/security/config/annotation/web/configurers/oauth2/server/authorization/OAuth2AuthorizationServerConfigurer.java @@ -427,11 +427,17 @@ public final class OAuth2AuthorizationServerConfigurer this.spring.register(AuthorizationServerConfigurationWithInvalidQueryIssuerUrl.class).autowire() + ); + } + + @Test + public void loadContextWhenIssuerWithFragmentThenThrowException() { + assertThatThrownBy( + () -> this.spring.register(AuthorizationServerConfigurationWithInvalidFragmentIssuerUrl.class).autowire() + ); + } + + @Test + public void loadContextWhenIssuerWithQueryAndFragmentThenThrowException() { + assertThatThrownBy( + () -> this.spring.register(AuthorizationServerConfigurationWithInvalidQueryAndFragmentIssuerUrl.class).autowire() + ); + } + + @Test + public void loadContextWhenIssuerEndWithQuestionMarkCharacterThenThrowException() { + assertThatThrownBy( + () -> this.spring.register(AuthorizationServerConfigurationWithInvalidIssuerUrlEndWithQuestionMarkCharacter.class).autowire() + ); + } + + @Test + public void loadContextWhenIssuerEndWithNumberSignCharacterThenThrowException() { + assertThatThrownBy( + () -> this.spring.register(AuthorizationServerConfigurationWithInvalidIssuerUrlEndWithNumberSignCharacter.class).autowire() + ); + } + @Test public void requestWhenAuthenticationRequestThenTokenResponseIncludesIdToken() throws Exception { this.spring.register(AuthorizationServerConfiguration.class).autowire(); @@ -459,4 +494,54 @@ public class OidcTests { } } + @EnableWebSecurity + @Import(OAuth2AuthorizationServerConfiguration.class) + static class AuthorizationServerConfigurationWithInvalidQueryIssuerUrl extends AuthorizationServerConfiguration { + + @Bean + ProviderSettings providerSettings() { + return ProviderSettings.builder().issuer("https://localhost:9000?something=any").build(); + } + } + + @EnableWebSecurity + @Import(OAuth2AuthorizationServerConfiguration.class) + static class AuthorizationServerConfigurationWithInvalidFragmentIssuerUrl extends AuthorizationServerConfiguration { + + @Bean + ProviderSettings providerSettings() { + return ProviderSettings.builder().issuer("https://localhost:9000#fragment").build(); + } + } + + @EnableWebSecurity + @Import(OAuth2AuthorizationServerConfiguration.class) + static class AuthorizationServerConfigurationWithInvalidQueryAndFragmentIssuerUrl extends AuthorizationServerConfiguration { + + @Bean + ProviderSettings providerSettings() { + return ProviderSettings.builder().issuer("https://localhost:9000?something=any#fragment").build(); + } + } + + @EnableWebSecurity + @Import(OAuth2AuthorizationServerConfiguration.class) + static class AuthorizationServerConfigurationWithInvalidIssuerUrlEndWithQuestionMarkCharacter extends AuthorizationServerConfiguration { + + @Bean + ProviderSettings providerSettings() { + return ProviderSettings.builder().issuer("https://localhost:9000?").build(); + } + } + + @EnableWebSecurity + @Import(OAuth2AuthorizationServerConfiguration.class) + static class AuthorizationServerConfigurationWithInvalidIssuerUrlEndWithNumberSignCharacter extends AuthorizationServerConfiguration { + + @Bean + ProviderSettings providerSettings() { + return ProviderSettings.builder().issuer("https://localhost:9000/#").build(); + } + } + }