Skip to content

Commit f56ac53

Browse files
committed
Merge branch '1.2.x' into 1.3.x
Closes spring-projectsgh-1685
2 parents acb49b9 + 1fcd004 commit f56ac53

File tree

2 files changed

+30
-5
lines changed

2 files changed

+30
-5
lines changed

oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/authentication/CodeVerifierAuthenticator.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -137,11 +137,14 @@ private boolean authenticate(OAuth2ClientAuthenticationToken clientAuthenticatio
137137
}
138138

139139
private static boolean authorizationCodeGrant(Map<String, Object> parameters) {
140-
// @formatter:off
141-
return AuthorizationGrantType.AUTHORIZATION_CODE.getValue().equals(
142-
parameters.get(OAuth2ParameterNames.GRANT_TYPE)) &&
143-
parameters.get(OAuth2ParameterNames.CODE) != null;
144-
// @formatter:on
140+
if (!AuthorizationGrantType.AUTHORIZATION_CODE.getValue()
141+
.equals(parameters.get(OAuth2ParameterNames.GRANT_TYPE))) {
142+
return false;
143+
}
144+
if (!StringUtils.hasText((String) parameters.get(OAuth2ParameterNames.CODE))) {
145+
throwInvalidGrant(OAuth2ParameterNames.CODE);
146+
}
147+
return true;
145148
}
146149

147150
private boolean codeVerifierValid(String codeVerifier, String codeChallenge, String codeChallengeMethod) {

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

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -515,6 +515,28 @@ public void requestWhenPublicClientWithPkceAndCustomRefreshTokenGeneratorThenRet
515515
.isEqualTo(true);
516516
}
517517

518+
// gh-1680
519+
@Test
520+
public void requestWhenPublicClientWithPkceAndEmptyCodeThenBadRequest() throws Exception {
521+
this.spring.register(AuthorizationServerConfiguration.class).autowire();
522+
523+
RegisteredClient registeredClient = TestRegisteredClients.registeredPublicClient().build();
524+
this.registeredClientRepository.save(registeredClient);
525+
526+
MultiValueMap<String, String> tokenRequestParameters = new LinkedMultiValueMap<>();
527+
tokenRequestParameters.set(OAuth2ParameterNames.GRANT_TYPE,
528+
AuthorizationGrantType.AUTHORIZATION_CODE.getValue());
529+
tokenRequestParameters.set(OAuth2ParameterNames.CODE, "");
530+
tokenRequestParameters.set(OAuth2ParameterNames.REDIRECT_URI,
531+
registeredClient.getRedirectUris().iterator().next());
532+
533+
this.mvc
534+
.perform(post(DEFAULT_TOKEN_ENDPOINT_URI).params(tokenRequestParameters)
535+
.param(OAuth2ParameterNames.CLIENT_ID, registeredClient.getClientId())
536+
.param(PkceParameterNames.CODE_VERIFIER, S256_CODE_VERIFIER))
537+
.andExpect(status().isBadRequest());
538+
}
539+
518540
@Test
519541
public void requestWhenConfidentialClientWithPkceAndMissingCodeVerifierThenBadRequest() throws Exception {
520542
this.spring.register(AuthorizationServerConfiguration.class).autowire();

0 commit comments

Comments
 (0)