|
|
|
@ -1,5 +1,5 @@ |
|
|
|
/* |
|
|
|
/* |
|
|
|
* Copyright 2020-2022 the original author or authors. |
|
|
|
* Copyright 2020-2023 the original author or authors. |
|
|
|
* |
|
|
|
* |
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
|
|
* you may not use this file except in compliance with the License. |
|
|
|
* you may not use this file except in compliance with the License. |
|
|
|
@ -60,6 +60,7 @@ import org.springframework.security.crypto.password.PasswordEncoder; |
|
|
|
import org.springframework.security.oauth2.core.AuthorizationGrantType; |
|
|
|
import org.springframework.security.oauth2.core.AuthorizationGrantType; |
|
|
|
import org.springframework.security.oauth2.core.ClientAuthenticationMethod; |
|
|
|
import org.springframework.security.oauth2.core.ClientAuthenticationMethod; |
|
|
|
import org.springframework.security.oauth2.core.OAuth2AccessToken; |
|
|
|
import org.springframework.security.oauth2.core.OAuth2AccessToken; |
|
|
|
|
|
|
|
import org.springframework.security.oauth2.core.OAuth2ErrorCodes; |
|
|
|
import org.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames; |
|
|
|
import org.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames; |
|
|
|
import org.springframework.security.oauth2.jose.TestJwks; |
|
|
|
import org.springframework.security.oauth2.jose.TestJwks; |
|
|
|
import org.springframework.security.oauth2.server.authorization.JdbcOAuth2AuthorizationService; |
|
|
|
import org.springframework.security.oauth2.server.authorization.JdbcOAuth2AuthorizationService; |
|
|
|
@ -98,6 +99,7 @@ import org.springframework.security.web.authentication.AuthenticationSuccessHand |
|
|
|
import org.springframework.security.web.util.matcher.RequestMatcher; |
|
|
|
import org.springframework.security.web.util.matcher.RequestMatcher; |
|
|
|
import org.springframework.test.web.servlet.MockMvc; |
|
|
|
import org.springframework.test.web.servlet.MockMvc; |
|
|
|
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; |
|
|
|
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; |
|
|
|
|
|
|
|
import org.springframework.web.util.UriComponentsBuilder; |
|
|
|
|
|
|
|
|
|
|
|
import static org.assertj.core.api.Assertions.assertThat; |
|
|
|
import static org.assertj.core.api.Assertions.assertThat; |
|
|
|
import static org.mockito.ArgumentMatchers.any; |
|
|
|
import static org.mockito.ArgumentMatchers.any; |
|
|
|
@ -231,6 +233,37 @@ public class OAuth2ClientCredentialsGrantTests { |
|
|
|
verify(jwtCustomizer).customize(any()); |
|
|
|
verify(jwtCustomizer).customize(any()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// gh-1378
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
|
|
|
public void requestWhenTokenRequestWithClientCredentialsInQueryParamThenInvalidRequest() throws Exception { |
|
|
|
|
|
|
|
this.spring.register(AuthorizationServerConfiguration.class).autowire(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
RegisteredClient registeredClient = TestRegisteredClients.registeredClient2().build(); |
|
|
|
|
|
|
|
this.registeredClientRepository.save(registeredClient); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
String tokenEndpointUri = UriComponentsBuilder.fromUriString(DEFAULT_TOKEN_ENDPOINT_URI) |
|
|
|
|
|
|
|
.queryParam(OAuth2ParameterNames.CLIENT_ID, registeredClient.getClientId()) |
|
|
|
|
|
|
|
.toUriString(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
this.mvc.perform(post(tokenEndpointUri) |
|
|
|
|
|
|
|
.param(OAuth2ParameterNames.CLIENT_SECRET, registeredClient.getClientSecret()) |
|
|
|
|
|
|
|
.param(OAuth2ParameterNames.GRANT_TYPE, AuthorizationGrantType.CLIENT_CREDENTIALS.getValue()) |
|
|
|
|
|
|
|
.param(OAuth2ParameterNames.SCOPE, "scope1 scope2")) |
|
|
|
|
|
|
|
.andExpect(status().isBadRequest()) |
|
|
|
|
|
|
|
.andExpect(jsonPath("$.error").value(OAuth2ErrorCodes.INVALID_REQUEST)); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tokenEndpointUri = UriComponentsBuilder.fromUriString(DEFAULT_TOKEN_ENDPOINT_URI) |
|
|
|
|
|
|
|
.queryParam(OAuth2ParameterNames.CLIENT_SECRET, registeredClient.getClientSecret()) |
|
|
|
|
|
|
|
.toUriString(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
this.mvc.perform(post(tokenEndpointUri) |
|
|
|
|
|
|
|
.param(OAuth2ParameterNames.CLIENT_ID, registeredClient.getClientId()) |
|
|
|
|
|
|
|
.param(OAuth2ParameterNames.GRANT_TYPE, AuthorizationGrantType.CLIENT_CREDENTIALS.getValue()) |
|
|
|
|
|
|
|
.param(OAuth2ParameterNames.SCOPE, "scope1 scope2")) |
|
|
|
|
|
|
|
.andExpect(status().isBadRequest()) |
|
|
|
|
|
|
|
.andExpect(jsonPath("$.error").value(OAuth2ErrorCodes.INVALID_REQUEST)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
@Test |
|
|
|
public void requestWhenTokenEndpointCustomizedThenUsed() throws Exception { |
|
|
|
public void requestWhenTokenEndpointCustomizedThenUsed() throws Exception { |
|
|
|
this.spring.register(AuthorizationServerConfigurationCustomTokenEndpoint.class).autowire(); |
|
|
|
this.spring.register(AuthorizationServerConfigurationCustomTokenEndpoint.class).autowire(); |
|
|
|
|