|
@@ -1,5 +1,5 @@
|
|
|
/*
|
|
|
- * Copyright 2002-2018 the original author or authors.
|
|
|
+ * Copyright 2002-2019 the original author or authors.
|
|
|
*
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
* you may not use this file except in compliance with the License.
|
|
@@ -15,7 +15,6 @@
|
|
|
*/
|
|
|
package org.springframework.security.oauth2.client.endpoint;
|
|
|
|
|
|
-import org.junit.Before;
|
|
|
import org.junit.Test;
|
|
|
import org.springframework.http.HttpHeaders;
|
|
|
import org.springframework.http.HttpMethod;
|
|
@@ -28,8 +27,14 @@ import org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationExch
|
|
|
import org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationRequest;
|
|
|
import org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationResponse;
|
|
|
import org.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames;
|
|
|
+import org.springframework.security.oauth2.core.endpoint.PkceParameterNames;
|
|
|
import org.springframework.util.MultiValueMap;
|
|
|
|
|
|
+import java.util.Arrays;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.HashSet;
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
import static org.assertj.core.api.Assertions.assertThat;
|
|
|
import static org.springframework.http.MediaType.APPLICATION_FORM_URLENCODED_VALUE;
|
|
|
|
|
@@ -40,11 +45,8 @@ import static org.springframework.http.MediaType.APPLICATION_FORM_URLENCODED_VAL
|
|
|
*/
|
|
|
public class OAuth2AuthorizationCodeGrantRequestEntityConverterTests {
|
|
|
private OAuth2AuthorizationCodeGrantRequestEntityConverter converter = new OAuth2AuthorizationCodeGrantRequestEntityConverter();
|
|
|
- private OAuth2AuthorizationCodeGrantRequest authorizationCodeGrantRequest;
|
|
|
-
|
|
|
- @Before
|
|
|
- public void setup() {
|
|
|
- ClientRegistration clientRegistration = ClientRegistration.withRegistrationId("registration-1")
|
|
|
+ private ClientRegistration.Builder clientRegistrationBuilder = ClientRegistration
|
|
|
+ .withRegistrationId("registration-1")
|
|
|
.clientId("client-1")
|
|
|
.clientSecret("secret")
|
|
|
.clientAuthenticationMethod(ClientAuthenticationMethod.BASIC)
|
|
@@ -55,33 +57,77 @@ public class OAuth2AuthorizationCodeGrantRequestEntityConverterTests {
|
|
|
.tokenUri("https://provider.com/oauth2/token")
|
|
|
.userInfoUri("https://provider.com/user")
|
|
|
.userNameAttributeName("id")
|
|
|
- .clientName("client-1")
|
|
|
- .build();
|
|
|
- OAuth2AuthorizationRequest authorizationRequest = OAuth2AuthorizationRequest
|
|
|
+ .clientName("client-1");
|
|
|
+ private OAuth2AuthorizationRequest.Builder authorizationRequestBuilder = OAuth2AuthorizationRequest
|
|
|
.authorizationCode()
|
|
|
- .clientId(clientRegistration.getClientId())
|
|
|
+ .clientId("client-1")
|
|
|
.state("state-1234")
|
|
|
- .authorizationUri(clientRegistration.getProviderDetails().getAuthorizationUri())
|
|
|
- .redirectUri(clientRegistration.getRedirectUriTemplate())
|
|
|
- .scopes(clientRegistration.getScopes())
|
|
|
- .build();
|
|
|
- OAuth2AuthorizationResponse authorizationResponse = OAuth2AuthorizationResponse
|
|
|
+ .authorizationUri("https://provider.com/oauth2/authorize")
|
|
|
+ .redirectUri("https://client.com/callback/client-1")
|
|
|
+ .scopes(new HashSet(Arrays.asList("read", "write")));
|
|
|
+ private OAuth2AuthorizationResponse.Builder authorizationResponseBuilder = OAuth2AuthorizationResponse
|
|
|
.success("code-1234")
|
|
|
.state("state-1234")
|
|
|
- .redirectUri(clientRegistration.getRedirectUriTemplate())
|
|
|
- .build();
|
|
|
+ .redirectUri("https://client.com/callback/client-1");
|
|
|
+
|
|
|
+ @SuppressWarnings("unchecked")
|
|
|
+ @Test
|
|
|
+ public void convertWhenGrantRequestValidThenConverts() {
|
|
|
+ ClientRegistration clientRegistration = clientRegistrationBuilder.build();
|
|
|
+ OAuth2AuthorizationRequest authorizationRequest = authorizationRequestBuilder.build();
|
|
|
+ OAuth2AuthorizationResponse authorizationResponse = authorizationResponseBuilder.build();
|
|
|
OAuth2AuthorizationExchange authorizationExchange =
|
|
|
new OAuth2AuthorizationExchange(authorizationRequest, authorizationResponse);
|
|
|
- this.authorizationCodeGrantRequest = new OAuth2AuthorizationCodeGrantRequest(
|
|
|
+ OAuth2AuthorizationCodeGrantRequest authorizationCodeGrantRequest = new OAuth2AuthorizationCodeGrantRequest(
|
|
|
clientRegistration, authorizationExchange);
|
|
|
+
|
|
|
+ RequestEntity<?> requestEntity = this.converter.convert(authorizationCodeGrantRequest);
|
|
|
+
|
|
|
+ assertThat(requestEntity.getMethod()).isEqualTo(HttpMethod.POST);
|
|
|
+ assertThat(requestEntity.getUrl().toASCIIString()).isEqualTo(
|
|
|
+ clientRegistration.getProviderDetails().getTokenUri());
|
|
|
+
|
|
|
+ HttpHeaders headers = requestEntity.getHeaders();
|
|
|
+ assertThat(headers.getAccept()).contains(MediaType.APPLICATION_JSON_UTF8);
|
|
|
+ assertThat(headers.getContentType()).isEqualTo(
|
|
|
+ MediaType.valueOf(APPLICATION_FORM_URLENCODED_VALUE + ";charset=UTF-8"));
|
|
|
+ assertThat(headers.getFirst(HttpHeaders.AUTHORIZATION)).startsWith("Basic ");
|
|
|
+
|
|
|
+ MultiValueMap<String, String> formParameters = (MultiValueMap<String, String>) requestEntity.getBody();
|
|
|
+ assertThat(formParameters.getFirst(OAuth2ParameterNames.GRANT_TYPE)).isEqualTo(
|
|
|
+ AuthorizationGrantType.AUTHORIZATION_CODE.getValue());
|
|
|
+ assertThat(formParameters.getFirst(OAuth2ParameterNames.CODE)).isEqualTo("code-1234");
|
|
|
+ assertThat(formParameters.getFirst(OAuth2ParameterNames.CLIENT_ID)).isNull();
|
|
|
+ assertThat(formParameters.getFirst(OAuth2ParameterNames.REDIRECT_URI)).isEqualTo(
|
|
|
+ clientRegistration.getRedirectUriTemplate());
|
|
|
}
|
|
|
|
|
|
@SuppressWarnings("unchecked")
|
|
|
@Test
|
|
|
- public void convertWhenGrantRequestValidThenConverts() {
|
|
|
- RequestEntity<?> requestEntity = this.converter.convert(this.authorizationCodeGrantRequest);
|
|
|
+ public void convertWhenPkceGrantRequestValidThenConverts() {
|
|
|
+ ClientRegistration clientRegistration = clientRegistrationBuilder
|
|
|
+ .clientSecret(null)
|
|
|
+ .build();
|
|
|
+
|
|
|
+ Map<String, Object> attributes = new HashMap<>();
|
|
|
+ attributes.put(PkceParameterNames.CODE_VERIFIER, "code-verifier-1234");
|
|
|
+
|
|
|
+ Map<String, Object> additionalParameters = new HashMap<>();
|
|
|
+ additionalParameters.put(PkceParameterNames.CODE_CHALLENGE, "code-challenge-1234");
|
|
|
+ additionalParameters.put(PkceParameterNames.CODE_CHALLENGE_METHOD, "S256");
|
|
|
+
|
|
|
+ OAuth2AuthorizationRequest authorizationRequest = authorizationRequestBuilder
|
|
|
+ .attributes(attributes)
|
|
|
+ .additionalParameters(additionalParameters)
|
|
|
+ .build();
|
|
|
|
|
|
- ClientRegistration clientRegistration = this.authorizationCodeGrantRequest.getClientRegistration();
|
|
|
+ OAuth2AuthorizationResponse authorizationResponse = authorizationResponseBuilder.build();
|
|
|
+ OAuth2AuthorizationExchange authorizationExchange =
|
|
|
+ new OAuth2AuthorizationExchange(authorizationRequest, authorizationResponse);
|
|
|
+ OAuth2AuthorizationCodeGrantRequest authorizationCodeGrantRequest = new OAuth2AuthorizationCodeGrantRequest(
|
|
|
+ clientRegistration, authorizationExchange);
|
|
|
+
|
|
|
+ RequestEntity<?> requestEntity = this.converter.convert(authorizationCodeGrantRequest);
|
|
|
|
|
|
assertThat(requestEntity.getMethod()).isEqualTo(HttpMethod.POST);
|
|
|
assertThat(requestEntity.getUrl().toASCIIString()).isEqualTo(
|
|
@@ -91,7 +137,7 @@ public class OAuth2AuthorizationCodeGrantRequestEntityConverterTests {
|
|
|
assertThat(headers.getAccept()).contains(MediaType.APPLICATION_JSON_UTF8);
|
|
|
assertThat(headers.getContentType()).isEqualTo(
|
|
|
MediaType.valueOf(APPLICATION_FORM_URLENCODED_VALUE + ";charset=UTF-8"));
|
|
|
- assertThat(headers.getFirst(HttpHeaders.AUTHORIZATION)).startsWith("Basic ");
|
|
|
+ assertThat(headers.getFirst(HttpHeaders.AUTHORIZATION)).isNull();
|
|
|
|
|
|
MultiValueMap<String, String> formParameters = (MultiValueMap<String, String>) requestEntity.getBody();
|
|
|
assertThat(formParameters.getFirst(OAuth2ParameterNames.GRANT_TYPE)).isEqualTo(
|
|
@@ -99,5 +145,7 @@ public class OAuth2AuthorizationCodeGrantRequestEntityConverterTests {
|
|
|
assertThat(formParameters.getFirst(OAuth2ParameterNames.CODE)).isEqualTo("code-1234");
|
|
|
assertThat(formParameters.getFirst(OAuth2ParameterNames.REDIRECT_URI)).isEqualTo(
|
|
|
clientRegistration.getRedirectUriTemplate());
|
|
|
+ assertThat(formParameters.getFirst(OAuth2ParameterNames.CLIENT_ID)).isEqualTo("client-1");
|
|
|
+ assertThat(formParameters.getFirst(PkceParameterNames.CODE_VERIFIER)).isEqualTo("code-verifier-1234");
|
|
|
}
|
|
|
}
|