Skip to content

Commit c37ecd7

Browse files
Steve Riesenbergjgrandja
Steve Riesenberg
authored andcommitted
OAuth2AuthorizationCodeAuthenticationProvider checks if code has expired
Closes gh-290
1 parent 6ddb73d commit c37ecd7

File tree

2 files changed

+32
-7
lines changed

2 files changed

+32
-7
lines changed

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

+4-4
Original file line numberDiff line numberDiff line change
@@ -41,13 +41,13 @@
4141
import org.springframework.security.oauth2.jwt.Jwt;
4242
import org.springframework.security.oauth2.jwt.JwtClaimsSet;
4343
import org.springframework.security.oauth2.jwt.JwtEncoder;
44+
import org.springframework.security.oauth2.server.authorization.JwtEncodingContext;
4445
import org.springframework.security.oauth2.server.authorization.OAuth2Authorization;
46+
import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationCode;
4547
import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationService;
48+
import org.springframework.security.oauth2.server.authorization.OAuth2TokenCustomizer;
4649
import org.springframework.security.oauth2.server.authorization.client.RegisteredClient;
4750
import org.springframework.security.oauth2.server.authorization.config.ProviderSettings;
48-
import org.springframework.security.oauth2.server.authorization.JwtEncodingContext;
49-
import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationCode;
50-
import org.springframework.security.oauth2.server.authorization.OAuth2TokenCustomizer;
5151
import org.springframework.util.Assert;
5252
import org.springframework.util.StringUtils;
5353

@@ -135,7 +135,7 @@ public Authentication authenticate(Authentication authentication) throws Authent
135135
throw new OAuth2AuthenticationException(new OAuth2Error(OAuth2ErrorCodes.INVALID_GRANT));
136136
}
137137

138-
if (authorizationCode.isInvalidated()) {
138+
if (!authorizationCode.isActive()) {
139139
throw new OAuth2AuthenticationException(new OAuth2Error(OAuth2ErrorCodes.INVALID_GRANT));
140140
}
141141

oauth2-authorization-server/src/test/java/org/springframework/security/oauth2/server/authorization/authentication/OAuth2AuthorizationCodeAuthenticationProviderTests.java

+28-3
Original file line numberDiff line numberDiff line change
@@ -45,14 +45,14 @@
4545
import org.springframework.security.oauth2.jwt.Jwt;
4646
import org.springframework.security.oauth2.jwt.JwtClaimsSet;
4747
import org.springframework.security.oauth2.jwt.JwtEncoder;
48+
import org.springframework.security.oauth2.server.authorization.JwtEncodingContext;
4849
import org.springframework.security.oauth2.server.authorization.OAuth2Authorization;
50+
import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationCode;
4951
import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationService;
52+
import org.springframework.security.oauth2.server.authorization.OAuth2TokenCustomizer;
5053
import org.springframework.security.oauth2.server.authorization.TestOAuth2Authorizations;
5154
import org.springframework.security.oauth2.server.authorization.client.RegisteredClient;
5255
import org.springframework.security.oauth2.server.authorization.client.TestRegisteredClients;
53-
import org.springframework.security.oauth2.server.authorization.JwtEncodingContext;
54-
import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationCode;
55-
import org.springframework.security.oauth2.server.authorization.OAuth2TokenCustomizer;
5656

5757
import static org.assertj.core.api.Assertions.assertThat;
5858
import static org.assertj.core.api.Assertions.assertThatThrownBy;
@@ -222,6 +222,31 @@ public void authenticateWhenInvalidatedCodeThenThrowOAuth2AuthenticationExceptio
222222
.isEqualTo(OAuth2ErrorCodes.INVALID_GRANT);
223223
}
224224

225+
// gh-290
226+
@Test
227+
public void authenticateWhenExpiredCodeThenThrowOAuth2AuthenticationException() {
228+
RegisteredClient registeredClient = TestRegisteredClients.registeredClient().build();
229+
OAuth2AuthorizationCode authorizationCode = new OAuth2AuthorizationCode(
230+
AUTHORIZATION_CODE, Instant.now().minusSeconds(300), Instant.now().minusSeconds(60));
231+
OAuth2Authorization authorization = TestOAuth2Authorizations.authorization(registeredClient)
232+
.token(authorizationCode)
233+
.build();
234+
when(this.authorizationService.findByToken(eq(AUTHORIZATION_CODE), eq(AUTHORIZATION_CODE_TOKEN_TYPE)))
235+
.thenReturn(authorization);
236+
237+
OAuth2ClientAuthenticationToken clientPrincipal = new OAuth2ClientAuthenticationToken(registeredClient);
238+
OAuth2AuthorizationRequest authorizationRequest = authorization.getAttribute(
239+
OAuth2AuthorizationRequest.class.getName());
240+
OAuth2AuthorizationCodeAuthenticationToken authentication =
241+
new OAuth2AuthorizationCodeAuthenticationToken(AUTHORIZATION_CODE, clientPrincipal, authorizationRequest.getRedirectUri(), null);
242+
243+
assertThatThrownBy(() -> this.authenticationProvider.authenticate(authentication))
244+
.isInstanceOf(OAuth2AuthenticationException.class)
245+
.extracting(ex -> ((OAuth2AuthenticationException) ex).getError())
246+
.extracting("errorCode")
247+
.isEqualTo(OAuth2ErrorCodes.INVALID_GRANT);
248+
}
249+
225250
@Test
226251
public void authenticateWhenValidCodeThenReturnAccessToken() {
227252
RegisteredClient registeredClient = TestRegisteredClients.registeredClient().build();

0 commit comments

Comments
 (0)