Skip to content

Commit 0ed7b18

Browse files
committed
DefaultServerOAuth2AuthorizationRequestResolver requireProofKey support
When requireProofKey=true, DefaultServerOAuth2AuthorizationRequestResolver enables PKCE support. Issue gh-16382
1 parent 8d3e084 commit 0ed7b18

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/web/server/DefaultServerOAuth2AuthorizationRequestResolver.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,8 @@ private OAuth2AuthorizationRequest.Builder getBuilder(ClientRegistration clientR
196196
// value.
197197
applyNonce(builder);
198198
}
199-
if (ClientAuthenticationMethod.NONE.equals(clientRegistration.getClientAuthenticationMethod())) {
199+
if (ClientAuthenticationMethod.NONE.equals(clientRegistration.getClientAuthenticationMethod())
200+
|| clientRegistration.getClientSettings().isRequireProofKey()) {
200201
DEFAULT_PKCE_APPLIER.accept(builder);
201202
}
202203
return builder;

oauth2/oauth2-client/src/test/java/org/springframework/security/oauth2/client/web/server/DefaultServerOAuth2AuthorizationRequestResolverTests.java

+15
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import org.springframework.mock.http.server.reactive.MockServerHttpRequest;
2828
import org.springframework.mock.web.server.MockServerWebExchange;
2929
import org.springframework.security.oauth2.client.registration.ClientRegistration;
30+
import org.springframework.security.oauth2.client.registration.ClientSettings;
3031
import org.springframework.security.oauth2.client.registration.ReactiveClientRegistrationRepository;
3132
import org.springframework.security.oauth2.client.registration.TestClientRegistrations;
3233
import org.springframework.security.oauth2.client.web.OAuth2AuthorizationRequestCustomizers;
@@ -169,6 +170,20 @@ public void resolveWhenAuthorizationRequestApplyPkceToSpecificConfidentialClient
169170
assertPkceNotApplied(request, registration2);
170171
}
171172

173+
@Test
174+
void resolveWhenRequireProofKeyTrueThenPkceEnabled() {
175+
ClientSettings pkceEnabled = ClientSettings.builder().requireProofKey(true).build();
176+
ClientRegistration clientWithPkceEnabled = TestClientRegistrations.clientRegistration()
177+
.clientSettings(pkceEnabled)
178+
.build();
179+
given(this.clientRegistrationRepository.findByRegistrationId(any()))
180+
.willReturn(Mono.just(clientWithPkceEnabled));
181+
182+
OAuth2AuthorizationRequest request = resolve(
183+
"/oauth2/authorization/" + clientWithPkceEnabled.getRegistrationId());
184+
assertPkceApplied(request, clientWithPkceEnabled);
185+
}
186+
172187
private void assertPkceApplied(OAuth2AuthorizationRequest authorizationRequest,
173188
ClientRegistration clientRegistration) {
174189
assertThat(authorizationRequest.getAdditionalParameters()).containsKey(PkceParameterNames.CODE_CHALLENGE);

0 commit comments

Comments
 (0)