Skip to content

Commit 46baf38

Browse files
committed
Fix OAuth2AuthorizationRequest additionalParameters/attributes Consumer
Fixes gh-8177
1 parent 2c103f3 commit 46baf38

File tree

6 files changed

+23
-26
lines changed

6 files changed

+23
-26
lines changed

oauth2/oauth2-client/src/test/java/org/springframework/security/oauth2/client/jackson2/OAuth2AuthorizationRequestMixinTests.java

+4-5
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import org.springframework.util.CollectionUtils;
2828
import org.springframework.util.StringUtils;
2929

30-
import java.util.Collections;
3130
import java.util.LinkedHashMap;
3231
import java.util.Map;
3332
import java.util.stream.Collectors;
@@ -71,8 +70,8 @@ public void serializeWhenRequiredAttributesOnlyThenSerializes() throws Exception
7170
this.authorizationRequestBuilder
7271
.scopes(null)
7372
.state(null)
74-
.additionalParameters(Collections.emptyMap())
75-
.attributes(Collections.emptyMap())
73+
.additionalParameters(Map::clear)
74+
.attributes(Map::clear)
7675
.build();
7776
String expectedJson = asJson(authorizationRequest);
7877
String json = this.mapper.writeValueAsString(authorizationRequest);
@@ -119,8 +118,8 @@ public void deserializeWhenRequiredAttributesOnlyThenDeserializes() throws Excep
119118
this.authorizationRequestBuilder
120119
.scopes(null)
121120
.state(null)
122-
.additionalParameters(Collections.emptyMap())
123-
.attributes(Collections.emptyMap())
121+
.additionalParameters(Map::clear)
122+
.attributes(Map::clear)
124123
.build();
125124
String json = asJson(expectedAuthorizationRequest);
126125
OAuth2AuthorizationRequest authorizationRequest = this.mapper.readValue(json, OAuth2AuthorizationRequest.class);

oauth2/oauth2-client/src/test/java/org/springframework/security/oauth2/client/web/DefaultOAuth2AuthorizationRequestResolverTests.java

+1
Original file line numberDiff line numberDiff line change
@@ -437,6 +437,7 @@ public void resolveWhenAuthorizationRequestCustomizerRemovesNonceThenQueryExclud
437437
OAuth2AuthorizationRequest authorizationRequest = this.resolver.resolve(request);
438438
assertThat(authorizationRequest.getAdditionalParameters()).doesNotContainKey(OidcParameterNames.NONCE);
439439
assertThat(authorizationRequest.getAttributes()).doesNotContainKey(OidcParameterNames.NONCE);
440+
assertThat(authorizationRequest.getAttributes()).containsKey(OAuth2ParameterNames.REGISTRATION_ID);
440441
assertThat(authorizationRequest.getAuthorizationRequestUri())
441442
.matches("https://example.com/login/oauth/authorize\\?" +
442443
"response_type=code&client_id=client-id&" +

oauth2/oauth2-client/src/test/java/org/springframework/security/oauth2/client/web/server/DefaultServerOAuth2AuthorizationRequestResolverTests.java

+2
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.springframework.security.oauth2.client.registration.TestClientRegistrations;
3030
import org.springframework.security.oauth2.core.ClientAuthenticationMethod;
3131
import org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationRequest;
32+
import org.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames;
3233
import org.springframework.security.oauth2.core.endpoint.PkceParameterNames;
3334
import org.springframework.security.oauth2.core.oidc.OidcScopes;
3435
import org.springframework.security.oauth2.core.oidc.endpoint.OidcParameterNames;
@@ -162,6 +163,7 @@ public void resolveWhenAuthorizationRequestCustomizerRemovesNonceThenQueryExclud
162163

163164
assertThat(authorizationRequest.getAdditionalParameters()).doesNotContainKey(OidcParameterNames.NONCE);
164165
assertThat(authorizationRequest.getAttributes()).doesNotContainKey(OidcParameterNames.NONCE);
166+
assertThat(authorizationRequest.getAttributes()).containsKey(OAuth2ParameterNames.REGISTRATION_ID);
165167
assertThat(authorizationRequest.getAuthorizationRequestUri())
166168
.matches("https://example.com/login/oauth/authorize\\?" +
167169
"response_type=code&client_id=client-id&" +

oauth2/oauth2-client/src/test/java/org/springframework/security/oauth2/client/web/server/ServerOAuth2AuthorizationCodeAuthenticationTokenConverterTest.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import reactor.core.publisher.Mono;
3636

3737
import java.util.Collections;
38+
import java.util.Map;
3839

3940
import static org.assertj.core.api.Assertions.assertThat;
4041
import static org.assertj.core.api.Assertions.assertThatThrownBy;
@@ -96,7 +97,7 @@ public void applyWhenAuthorizationRequestEmptyThenOAuth2AuthorizationException()
9697

9798
@Test
9899
public void applyWhenAttributesMissingThenOAuth2AuthorizationException() {
99-
this.authorizationRequest.attributes(Collections.emptyMap());
100+
this.authorizationRequest.attributes(Map::clear);
100101
when(this.authorizationRequestRepository.removeAuthorizationRequest(any())).thenReturn(Mono.just(this.authorizationRequest.build()));
101102

102103
assertThatThrownBy(() -> applyConverter())

oauth2/oauth2-core/src/main/java/org/springframework/security/oauth2/core/endpoint/OAuth2AuthorizationRequest.java

+12-18
Original file line numberDiff line numberDiff line change
@@ -229,9 +229,9 @@ public static class Builder {
229229
private String redirectUri;
230230
private Set<String> scopes;
231231
private String state;
232-
private Consumer<Map<String, Object>> additionalParametersConsumer = params -> {};
232+
private Map<String, Object> additionalParameters = new LinkedHashMap<>();
233233
private Consumer<Map<String, Object>> parametersConsumer = params -> {};
234-
private Consumer<Map<String, Object>> attributesConsumer = attrs -> {};
234+
private Map<String, Object> attributes = new LinkedHashMap<>();
235235
private String authorizationRequestUri;
236236
private Function<UriBuilder, URI> authorizationRequestUriFunction = builder -> builder.build();
237237
private final DefaultUriBuilderFactory uriBuilderFactory;
@@ -325,8 +325,8 @@ public Builder state(String state) {
325325
* @return the {@link Builder}
326326
*/
327327
public Builder additionalParameters(Map<String, Object> additionalParameters) {
328-
if (additionalParameters != null) {
329-
return additionalParameters(params -> params.putAll(additionalParameters));
328+
if (!CollectionUtils.isEmpty(additionalParameters)) {
329+
this.additionalParameters.putAll(additionalParameters);
330330
}
331331
return this;
332332
}
@@ -340,7 +340,7 @@ public Builder additionalParameters(Map<String, Object> additionalParameters) {
340340
*/
341341
public Builder additionalParameters(Consumer<Map<String, Object>> additionalParametersConsumer) {
342342
if (additionalParametersConsumer != null) {
343-
this.additionalParametersConsumer = additionalParametersConsumer;
343+
additionalParametersConsumer.accept(this.additionalParameters);
344344
}
345345
return this;
346346
}
@@ -367,8 +367,8 @@ public Builder parameters(Consumer<Map<String, Object>> parametersConsumer) {
367367
* @return the {@link Builder}
368368
*/
369369
public Builder attributes(Map<String, Object> attributes) {
370-
if (attributes != null) {
371-
return attributes(attrs -> attrs.putAll(attributes));
370+
if (!CollectionUtils.isEmpty(attributes)) {
371+
this.attributes.putAll(attributes);
372372
}
373373
return this;
374374
}
@@ -382,7 +382,7 @@ public Builder attributes(Map<String, Object> attributes) {
382382
*/
383383
public Builder attributes(Consumer<Map<String, Object>> attributesConsumer) {
384384
if (attributesConsumer != null) {
385-
this.attributesConsumer = attributesConsumer;
385+
attributesConsumer.accept(this.attributes);
386386
}
387387
return this;
388388
}
@@ -439,12 +439,8 @@ public OAuth2AuthorizationRequest build() {
439439
authorizationRequest.scopes = Collections.unmodifiableSet(
440440
CollectionUtils.isEmpty(this.scopes) ?
441441
Collections.emptySet() : new LinkedHashSet<>(this.scopes));
442-
Map<String, Object> additionalParameters = new LinkedHashMap<>();
443-
this.additionalParametersConsumer.accept(additionalParameters);
444-
authorizationRequest.additionalParameters = Collections.unmodifiableMap(additionalParameters);
445-
Map<String, Object> attributes = new LinkedHashMap<>();
446-
this.attributesConsumer.accept(attributes);
447-
authorizationRequest.attributes = Collections.unmodifiableMap(attributes);
442+
authorizationRequest.additionalParameters = Collections.unmodifiableMap(this.additionalParameters);
443+
authorizationRequest.attributes = Collections.unmodifiableMap(this.attributes);
448444
authorizationRequest.authorizationRequestUri =
449445
StringUtils.hasText(this.authorizationRequestUri) ?
450446
this.authorizationRequestUri : this.buildAuthorizationRequestUri();
@@ -457,7 +453,7 @@ private String buildAuthorizationRequestUri() {
457453
this.parametersConsumer.accept(parameters);
458454
MultiValueMap<String, String> queryParams = new LinkedMultiValueMap<>();
459455
parameters.forEach((k, v) -> queryParams.set(
460-
encodeQueryParam(k), encodeQueryParam(v.toString()))); // Encoded
456+
encodeQueryParam(k), encodeQueryParam(String.valueOf(v)))); // Encoded
461457
UriBuilder uriBuilder = this.uriBuilderFactory.uriString(this.authorizationUri)
462458
.queryParams(queryParams);
463459
return this.authorizationRequestUriFunction.apply(uriBuilder).toString();
@@ -477,9 +473,7 @@ private Map<String, Object> getParameters() {
477473
if (this.redirectUri != null) {
478474
parameters.put(OAuth2ParameterNames.REDIRECT_URI, this.redirectUri);
479475
}
480-
Map<String, Object> additionalParameters = new LinkedHashMap<>();
481-
this.additionalParametersConsumer.accept(additionalParameters);
482-
additionalParameters.forEach((k, v) -> parameters.put(k, v.toString()));
476+
parameters.putAll(this.additionalParameters);
483477
return parameters;
484478
}
485479

oauth2/oauth2-core/src/test/java/org/springframework/security/oauth2/core/endpoint/OAuth2AuthorizationRequestTests.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -121,15 +121,15 @@ public void buildWhenStateIsNullThenDoesNotThrowAnyException() {
121121
}
122122

123123
@Test
124-
public void buildWhenAdditionalParametersIsNullThenDoesNotThrowAnyException() {
124+
public void buildWhenAdditionalParametersEmptyThenDoesNotThrowAnyException() {
125125
assertThatCode(() ->
126126
OAuth2AuthorizationRequest.authorizationCode()
127127
.authorizationUri(AUTHORIZATION_URI)
128128
.clientId(CLIENT_ID)
129129
.redirectUri(REDIRECT_URI)
130130
.scopes(SCOPES)
131131
.state(STATE)
132-
.additionalParameters((Map) null)
132+
.additionalParameters(Map::clear)
133133
.build())
134134
.doesNotThrowAnyException();
135135
}

0 commit comments

Comments
 (0)