Skip to content

Commit 9addcf6

Browse files
committed
AuthorizationServerContext is accessible in custom consent controller
Closes spring-projectsgh-1668
1 parent 520fe25 commit 9addcf6

File tree

2 files changed

+43
-7
lines changed

2 files changed

+43
-7
lines changed

oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/config/annotation/web/configurers/OAuth2AuthorizationEndpointConfigurer.java

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2020-2023 the original author or authors.
2+
* Copyright 2020-2024 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -237,12 +237,15 @@ void setSessionAuthenticationStrategy(SessionAuthenticationStrategy sessionAuthe
237237
void init(HttpSecurity httpSecurity) {
238238
AuthorizationServerSettings authorizationServerSettings = OAuth2ConfigurerUtils
239239
.getAuthorizationServerSettings(httpSecurity);
240-
this.requestMatcher = new OrRequestMatcher(
241-
new AntPathRequestMatcher(authorizationServerSettings.getAuthorizationEndpoint(),
242-
HttpMethod.GET.name()),
243-
new AntPathRequestMatcher(authorizationServerSettings.getAuthorizationEndpoint(),
244-
HttpMethod.POST.name()));
245-
240+
List<RequestMatcher> requestMatchers = new ArrayList<>();
241+
requestMatchers.add(new AntPathRequestMatcher(authorizationServerSettings.getAuthorizationEndpoint(),
242+
HttpMethod.GET.name()));
243+
requestMatchers.add(new AntPathRequestMatcher(authorizationServerSettings.getAuthorizationEndpoint(),
244+
HttpMethod.POST.name()));
245+
if (StringUtils.hasText(this.consentPage)) {
246+
requestMatchers.add(new AntPathRequestMatcher(this.consentPage));
247+
}
248+
this.requestMatcher = new OrRequestMatcher(requestMatchers);
246249
List<AuthenticationProvider> authenticationProviders = createDefaultAuthenticationProviders(httpSecurity);
247250
if (!this.authenticationProviders.isEmpty()) {
248251
authenticationProviders.addAll(0, this.authenticationProviders);

oauth2-authorization-server/src/test/java/org/springframework/security/oauth2/server/authorization/config/annotation/web/configurers/OAuth2AuthorizationCodeGrantTests.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@
104104
import org.springframework.security.oauth2.server.authorization.client.RegisteredClientRepository;
105105
import org.springframework.security.oauth2.server.authorization.client.TestRegisteredClients;
106106
import org.springframework.security.oauth2.server.authorization.config.annotation.web.configuration.OAuth2AuthorizationServerConfiguration;
107+
import org.springframework.security.oauth2.server.authorization.context.AuthorizationServerContextHolder;
107108
import org.springframework.security.oauth2.server.authorization.jackson2.TestingAuthenticationTokenMixin;
108109
import org.springframework.security.oauth2.server.authorization.settings.AuthorizationServerSettings;
109110
import org.springframework.security.oauth2.server.authorization.settings.ClientSettings;
@@ -125,11 +126,14 @@
125126
import org.springframework.security.web.context.HttpSessionSecurityContextRepository;
126127
import org.springframework.security.web.context.SecurityContextRepository;
127128
import org.springframework.security.web.util.matcher.RequestMatcher;
129+
import org.springframework.stereotype.Controller;
128130
import org.springframework.test.web.servlet.MockMvc;
129131
import org.springframework.test.web.servlet.MvcResult;
130132
import org.springframework.util.LinkedMultiValueMap;
131133
import org.springframework.util.MultiValueMap;
132134
import org.springframework.util.StringUtils;
135+
import org.springframework.web.bind.annotation.GetMapping;
136+
import org.springframework.web.bind.annotation.ResponseBody;
133137
import org.springframework.web.util.UriComponents;
134138
import org.springframework.web.util.UriComponentsBuilder;
135139
import org.springframework.web.util.UriUtils;
@@ -746,6 +750,15 @@ public void requestWhenCustomConsentPageConfiguredThenRedirect() throws Exceptio
746750
assertThat(authorization).isNotNull();
747751
}
748752

753+
// gh-1668
754+
@Test
755+
public void requestWhenCustomConsentPageConfiguredThenAuthorizationServerContextIsAccessible() throws Exception {
756+
this.spring.register(AuthorizationServerConfigurationCustomConsentPageAccessAuthorizationServerContext.class)
757+
.autowire();
758+
759+
this.mvc.perform(get(consentPage).with(user("user"))).andExpect(status().isOk());
760+
}
761+
749762
@Test
750763
public void requestWhenCustomConsentCustomizerConfiguredThenUsed() throws Exception {
751764
this.spring.register(AuthorizationServerConfigurationCustomConsentRequest.class).autowire();
@@ -1166,6 +1179,26 @@ SecurityFilterChain authorizationServerSecurityFilterChain(HttpSecurity http) th
11661179

11671180
}
11681181

1182+
@EnableWebSecurity
1183+
@Configuration(proxyBeanMethods = false)
1184+
static class AuthorizationServerConfigurationCustomConsentPageAccessAuthorizationServerContext
1185+
extends AuthorizationServerConfigurationCustomConsentPage {
1186+
1187+
@Controller
1188+
class ConsentController {
1189+
1190+
@GetMapping("/oauth2/consent")
1191+
@ResponseBody
1192+
String consent() {
1193+
// Ensure the AuthorizationServerContext is accessible
1194+
AuthorizationServerContextHolder.getContext().getIssuer();
1195+
return "";
1196+
}
1197+
1198+
}
1199+
1200+
}
1201+
11691202
@EnableWebSecurity
11701203
@Configuration(proxyBeanMethods = false)
11711204
static class AuthorizationServerConfigurationCustomConsentRequest extends AuthorizationServerConfiguration {

0 commit comments

Comments
 (0)