Skip to content

Commit 6c74864

Browse files
committed
Polish gh-88
1 parent cf82c06 commit 6c74864

File tree

2 files changed

+31
-7
lines changed

2 files changed

+31
-7
lines changed

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

+5
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import org.springframework.security.authentication.AuthenticationProvider;
1919
import org.springframework.security.core.Authentication;
2020
import org.springframework.security.core.AuthenticationException;
21+
import org.springframework.security.oauth2.core.AuthorizationGrantType;
2122
import org.springframework.security.oauth2.core.OAuth2AccessToken;
2223
import org.springframework.security.oauth2.core.OAuth2AuthenticationException;
2324
import org.springframework.security.oauth2.core.OAuth2Error;
@@ -80,6 +81,10 @@ public Authentication authenticate(Authentication authentication) throws Authent
8081
}
8182
RegisteredClient registeredClient = clientPrincipal.getRegisteredClient();
8283

84+
if (!registeredClient.getAuthorizationGrantTypes().contains(AuthorizationGrantType.CLIENT_CREDENTIALS)) {
85+
throw new OAuth2AuthenticationException(new OAuth2Error(OAuth2ErrorCodes.UNAUTHORIZED_CLIENT));
86+
}
87+
8388
Set<String> scopes = registeredClient.getScopes(); // Default to configured scopes
8489
if (!CollectionUtils.isEmpty(clientCredentialsAuthentication.getScopes())) {
8590
Set<String> unauthorizedScopes = clientCredentialsAuthentication.getScopes().stream()

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

+26-7
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import org.junit.Test;
2020
import org.mockito.ArgumentCaptor;
2121
import org.springframework.security.authentication.TestingAuthenticationToken;
22+
import org.springframework.security.oauth2.core.AuthorizationGrantType;
2223
import org.springframework.security.oauth2.core.OAuth2AuthenticationException;
2324
import org.springframework.security.oauth2.core.OAuth2ErrorCodes;
2425
import org.springframework.security.oauth2.jose.JoseHeaderNames;
@@ -49,14 +50,12 @@
4950
* @author Joe Grandja
5051
*/
5152
public class OAuth2ClientCredentialsAuthenticationProviderTests {
52-
private RegisteredClient registeredClient;
5353
private OAuth2AuthorizationService authorizationService;
5454
private JwtEncoder jwtEncoder;
5555
private OAuth2ClientCredentialsAuthenticationProvider authenticationProvider;
5656

5757
@Before
5858
public void setUp() {
59-
this.registeredClient = TestRegisteredClients.registeredClient().build();
6059
this.authorizationService = mock(OAuth2AuthorizationService.class);
6160
this.jwtEncoder = mock(JwtEncoder.class);
6261
this.authenticationProvider = new OAuth2ClientCredentialsAuthenticationProvider(
@@ -89,8 +88,9 @@ public void supportsWhenUnsupportedAuthenticationThenFalse() {
8988

9089
@Test
9190
public void authenticateWhenClientPrincipalNotOAuth2ClientAuthenticationTokenThenThrowOAuth2AuthenticationException() {
91+
RegisteredClient registeredClient = TestRegisteredClients.registeredClient2().build();
9292
TestingAuthenticationToken clientPrincipal = new TestingAuthenticationToken(
93-
this.registeredClient.getClientId(), this.registeredClient.getClientSecret());
93+
registeredClient.getClientId(), registeredClient.getClientSecret());
9494
OAuth2ClientCredentialsAuthenticationToken authentication = new OAuth2ClientCredentialsAuthenticationToken(clientPrincipal);
9595

9696
assertThatThrownBy(() -> this.authenticationProvider.authenticate(authentication))
@@ -102,8 +102,9 @@ public void authenticateWhenClientPrincipalNotOAuth2ClientAuthenticationTokenThe
102102

103103
@Test
104104
public void authenticateWhenClientPrincipalNotAuthenticatedThenThrowOAuth2AuthenticationException() {
105+
RegisteredClient registeredClient = TestRegisteredClients.registeredClient2().build();
105106
OAuth2ClientAuthenticationToken clientPrincipal = new OAuth2ClientAuthenticationToken(
106-
this.registeredClient.getClientId(), this.registeredClient.getClientSecret(), null);
107+
registeredClient.getClientId(), registeredClient.getClientSecret(), null);
107108
OAuth2ClientCredentialsAuthenticationToken authentication = new OAuth2ClientCredentialsAuthenticationToken(clientPrincipal);
108109

109110
assertThatThrownBy(() -> this.authenticationProvider.authenticate(authentication))
@@ -113,9 +114,25 @@ public void authenticateWhenClientPrincipalNotAuthenticatedThenThrowOAuth2Authen
113114
.isEqualTo(OAuth2ErrorCodes.INVALID_CLIENT);
114115
}
115116

117+
@Test
118+
public void authenticateWhenClientNotAuthorizedToRequestTokenThenThrowOAuth2AuthenticationException() {
119+
RegisteredClient registeredClient = TestRegisteredClients.registeredClient2()
120+
.authorizationGrantTypes(grantTypes -> grantTypes.remove(AuthorizationGrantType.CLIENT_CREDENTIALS))
121+
.build();
122+
OAuth2ClientAuthenticationToken clientPrincipal = new OAuth2ClientAuthenticationToken(registeredClient);
123+
OAuth2ClientCredentialsAuthenticationToken authentication = new OAuth2ClientCredentialsAuthenticationToken(clientPrincipal);
124+
125+
assertThatThrownBy(() -> this.authenticationProvider.authenticate(authentication))
126+
.isInstanceOf(OAuth2AuthenticationException.class)
127+
.extracting(ex -> ((OAuth2AuthenticationException) ex).getError())
128+
.extracting("errorCode")
129+
.isEqualTo(OAuth2ErrorCodes.UNAUTHORIZED_CLIENT);
130+
}
131+
116132
@Test
117133
public void authenticateWhenInvalidScopeThenThrowOAuth2AuthenticationException() {
118-
OAuth2ClientAuthenticationToken clientPrincipal = new OAuth2ClientAuthenticationToken(this.registeredClient);
134+
RegisteredClient registeredClient = TestRegisteredClients.registeredClient2().build();
135+
OAuth2ClientAuthenticationToken clientPrincipal = new OAuth2ClientAuthenticationToken(registeredClient);
119136
OAuth2ClientCredentialsAuthenticationToken authentication = new OAuth2ClientCredentialsAuthenticationToken(
120137
clientPrincipal, Collections.singleton("invalid-scope"));
121138

@@ -128,7 +145,8 @@ public void authenticateWhenInvalidScopeThenThrowOAuth2AuthenticationException()
128145

129146
@Test
130147
public void authenticateWhenScopeRequestedThenAccessTokenContainsScope() {
131-
OAuth2ClientAuthenticationToken clientPrincipal = new OAuth2ClientAuthenticationToken(this.registeredClient);
148+
RegisteredClient registeredClient = TestRegisteredClients.registeredClient2().build();
149+
OAuth2ClientAuthenticationToken clientPrincipal = new OAuth2ClientAuthenticationToken(registeredClient);
132150
Set<String> requestedScope = Collections.singleton("openid");
133151
OAuth2ClientCredentialsAuthenticationToken authentication =
134152
new OAuth2ClientCredentialsAuthenticationToken(clientPrincipal, requestedScope);
@@ -142,7 +160,8 @@ public void authenticateWhenScopeRequestedThenAccessTokenContainsScope() {
142160

143161
@Test
144162
public void authenticateWhenValidAuthenticationThenReturnAccessToken() {
145-
OAuth2ClientAuthenticationToken clientPrincipal = new OAuth2ClientAuthenticationToken(this.registeredClient);
163+
RegisteredClient registeredClient = TestRegisteredClients.registeredClient2().build();
164+
OAuth2ClientAuthenticationToken clientPrincipal = new OAuth2ClientAuthenticationToken(registeredClient);
146165
OAuth2ClientCredentialsAuthenticationToken authentication = new OAuth2ClientCredentialsAuthenticationToken(clientPrincipal);
147166

148167
when(this.jwtEncoder.encode(any(), any())).thenReturn(createJwt());

0 commit comments

Comments
 (0)