Skip to content

Commit 57c053a

Browse files
committed
Reuse client authentication assertion
Closes spring-projectsgh-144
1 parent 7f1e997 commit 57c053a

File tree

5 files changed

+31
-28
lines changed

5 files changed

+31
-28
lines changed

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

+15
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,11 @@
1616
package org.springframework.security.oauth2.server.authorization.authentication;
1717

1818
import org.springframework.security.authentication.AuthenticationProvider;
19+
import org.springframework.security.core.Authentication;
1920
import org.springframework.security.oauth2.core.AbstractOAuth2Token;
21+
import org.springframework.security.oauth2.core.OAuth2AuthenticationException;
22+
import org.springframework.security.oauth2.core.OAuth2Error;
23+
import org.springframework.security.oauth2.core.OAuth2ErrorCodes;
2024
import org.springframework.security.oauth2.core.OAuth2RefreshToken;
2125
import org.springframework.security.oauth2.server.authorization.OAuth2Authorization;
2226
import org.springframework.security.oauth2.server.authorization.token.OAuth2AuthorizationCode;
@@ -34,6 +38,17 @@ final class OAuth2AuthenticationProviderUtils {
3438
private OAuth2AuthenticationProviderUtils() {
3539
}
3640

41+
static OAuth2ClientAuthenticationToken getAuthenticatedClientElseThrowInvalidClient(Authentication authentication) {
42+
OAuth2ClientAuthenticationToken clientPrincipal = null;
43+
if (OAuth2ClientAuthenticationToken.class.isAssignableFrom(authentication.getPrincipal().getClass())) {
44+
clientPrincipal = (OAuth2ClientAuthenticationToken) authentication.getPrincipal();
45+
}
46+
if (clientPrincipal != null && clientPrincipal.isAuthenticated()) {
47+
return clientPrincipal;
48+
}
49+
throw new OAuth2AuthenticationException(new OAuth2Error(OAuth2ErrorCodes.INVALID_CLIENT));
50+
}
51+
3752
static <T extends AbstractOAuth2Token> OAuth2Authorization invalidate(
3853
OAuth2Authorization authorization, T token) {
3954

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

+4-7
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@
4040

4141
import java.util.Set;
4242

43+
import static org.springframework.security.oauth2.server.authorization.authentication.OAuth2AuthenticationProviderUtils.getAuthenticatedClientElseThrowInvalidClient;
44+
4345
/**
4446
* An {@link AuthenticationProvider} implementation for the OAuth 2.0 Authorization Code Grant.
4547
*
@@ -81,13 +83,8 @@ public Authentication authenticate(Authentication authentication) throws Authent
8183
OAuth2AuthorizationCodeAuthenticationToken authorizationCodeAuthentication =
8284
(OAuth2AuthorizationCodeAuthenticationToken) authentication;
8385

84-
OAuth2ClientAuthenticationToken clientPrincipal = null;
85-
if (OAuth2ClientAuthenticationToken.class.isAssignableFrom(authorizationCodeAuthentication.getPrincipal().getClass())) {
86-
clientPrincipal = (OAuth2ClientAuthenticationToken) authorizationCodeAuthentication.getPrincipal();
87-
}
88-
if (clientPrincipal == null || !clientPrincipal.isAuthenticated()) {
89-
throw new OAuth2AuthenticationException(new OAuth2Error(OAuth2ErrorCodes.INVALID_CLIENT));
90-
}
86+
OAuth2ClientAuthenticationToken clientPrincipal =
87+
getAuthenticatedClientElseThrowInvalidClient(authorizationCodeAuthentication);
9188
RegisteredClient registeredClient = clientPrincipal.getRegisteredClient();
9289

9390
OAuth2Authorization authorization = this.authorizationService.findByToken(

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

+4-7
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@
3737
import java.util.Set;
3838
import java.util.stream.Collectors;
3939

40+
import static org.springframework.security.oauth2.server.authorization.authentication.OAuth2AuthenticationProviderUtils.getAuthenticatedClientElseThrowInvalidClient;
41+
4042
/**
4143
* An {@link AuthenticationProvider} implementation for the OAuth 2.0 Client Credentials Grant.
4244
*
@@ -72,13 +74,8 @@ public Authentication authenticate(Authentication authentication) throws Authent
7274
OAuth2ClientCredentialsAuthenticationToken clientCredentialsAuthentication =
7375
(OAuth2ClientCredentialsAuthenticationToken) authentication;
7476

75-
OAuth2ClientAuthenticationToken clientPrincipal = null;
76-
if (OAuth2ClientAuthenticationToken.class.isAssignableFrom(clientCredentialsAuthentication.getPrincipal().getClass())) {
77-
clientPrincipal = (OAuth2ClientAuthenticationToken) clientCredentialsAuthentication.getPrincipal();
78-
}
79-
if (clientPrincipal == null || !clientPrincipal.isAuthenticated()) {
80-
throw new OAuth2AuthenticationException(new OAuth2Error(OAuth2ErrorCodes.INVALID_CLIENT));
81-
}
77+
OAuth2ClientAuthenticationToken clientPrincipal =
78+
getAuthenticatedClientElseThrowInvalidClient(clientCredentialsAuthentication);
8279
RegisteredClient registeredClient = clientPrincipal.getRegisteredClient();
8380

8481
if (!registeredClient.getAuthorizationGrantTypes().contains(AuthorizationGrantType.CLIENT_CREDENTIALS)) {

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

+4-7
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@
3838
import java.time.Instant;
3939
import java.util.Set;
4040

41+
import static org.springframework.security.oauth2.server.authorization.authentication.OAuth2AuthenticationProviderUtils.getAuthenticatedClientElseThrowInvalidClient;
42+
4143
/**
4244
* An {@link AuthenticationProvider} implementation for the OAuth 2.0 Refresh Token Grant.
4345
*
@@ -73,13 +75,8 @@ public Authentication authenticate(Authentication authentication) throws Authent
7375
OAuth2RefreshTokenAuthenticationToken refreshTokenAuthentication =
7476
(OAuth2RefreshTokenAuthenticationToken) authentication;
7577

76-
OAuth2ClientAuthenticationToken clientPrincipal = null;
77-
if (OAuth2ClientAuthenticationToken.class.isAssignableFrom(refreshTokenAuthentication.getPrincipal().getClass())) {
78-
clientPrincipal = (OAuth2ClientAuthenticationToken) refreshTokenAuthentication.getPrincipal();
79-
}
80-
if (clientPrincipal == null || !clientPrincipal.isAuthenticated()) {
81-
throw new OAuth2AuthenticationException(new OAuth2Error(OAuth2ErrorCodes.INVALID_CLIENT));
82-
}
78+
OAuth2ClientAuthenticationToken clientPrincipal =
79+
getAuthenticatedClientElseThrowInvalidClient(refreshTokenAuthentication);
8380
RegisteredClient registeredClient = clientPrincipal.getRegisteredClient();
8481

8582
OAuth2Authorization authorization = this.authorizationService.findByToken(

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

+4-7
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929
import org.springframework.util.Assert;
3030
import org.springframework.util.StringUtils;
3131

32+
import static org.springframework.security.oauth2.server.authorization.authentication.OAuth2AuthenticationProviderUtils.getAuthenticatedClientElseThrowInvalidClient;
33+
3234
/**
3335
* An {@link AuthenticationProvider} implementation for OAuth 2.0 Token Revocation.
3436
*
@@ -57,13 +59,8 @@ public Authentication authenticate(Authentication authentication) throws Authent
5759
OAuth2TokenRevocationAuthenticationToken tokenRevocationAuthentication =
5860
(OAuth2TokenRevocationAuthenticationToken) authentication;
5961

60-
OAuth2ClientAuthenticationToken clientPrincipal = null;
61-
if (OAuth2ClientAuthenticationToken.class.isAssignableFrom(tokenRevocationAuthentication.getPrincipal().getClass())) {
62-
clientPrincipal = (OAuth2ClientAuthenticationToken) tokenRevocationAuthentication.getPrincipal();
63-
}
64-
if (clientPrincipal == null || !clientPrincipal.isAuthenticated()) {
65-
throw new OAuth2AuthenticationException(new OAuth2Error(OAuth2ErrorCodes.INVALID_CLIENT));
66-
}
62+
OAuth2ClientAuthenticationToken clientPrincipal =
63+
getAuthenticatedClientElseThrowInvalidClient(tokenRevocationAuthentication);
6764
RegisteredClient registeredClient = clientPrincipal.getRegisteredClient();
6865

6966
TokenType tokenType = null;

0 commit comments

Comments
 (0)