Skip to content

Commit d32c98b

Browse files
committed
Add OAuth2AuthorizeRequest.Builder.principal(String)
Fixes gh-8018
1 parent c6da7b2 commit d32c98b

File tree

2 files changed

+51
-3
lines changed

2 files changed

+51
-3
lines changed

oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/OAuth2AuthorizeRequest.java

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2019 the original author or authors.
2+
* Copyright 2002-2020 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
1616
package org.springframework.security.oauth2.client;
1717

1818
import org.springframework.lang.Nullable;
19+
import org.springframework.security.authentication.AbstractAuthenticationToken;
1920
import org.springframework.security.core.Authentication;
2021
import org.springframework.security.oauth2.client.registration.ClientRegistration;
2122
import org.springframework.util.Assert;
@@ -134,6 +135,33 @@ private Builder(OAuth2AuthorizedClient authorizedClient) {
134135
this.authorizedClient = authorizedClient;
135136
}
136137

138+
/**
139+
* Sets the name of the {@code Principal} (to be) associated to the authorized client.
140+
*
141+
* @since 5.3
142+
* @param principalName the name of the {@code Principal} (to be) associated to the authorized client
143+
* @return the {@link Builder}
144+
*/
145+
public Builder principal(String principalName) {
146+
return principal(createAuthentication(principalName));
147+
}
148+
149+
private static Authentication createAuthentication(final String principalName) {
150+
Assert.hasText(principalName, "principalName cannot be empty");
151+
152+
return new AbstractAuthenticationToken(null) {
153+
@Override
154+
public Object getCredentials() {
155+
return "";
156+
}
157+
158+
@Override
159+
public Object getPrincipal() {
160+
return principalName;
161+
}
162+
};
163+
}
164+
137165
/**
138166
* Sets the {@code Principal} (to be) associated to the authorized client.
139167
*

oauth2/oauth2-client/src/test/java/org/springframework/security/oauth2/client/OAuth2AuthorizeRequestTests.java

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2019 the original author or authors.
2+
* Copyright 2002-2020 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -23,7 +23,9 @@
2323
import org.springframework.security.oauth2.core.TestOAuth2AccessTokens;
2424
import org.springframework.security.oauth2.core.TestOAuth2RefreshTokens;
2525

26-
import static org.assertj.core.api.Assertions.*;
26+
import static org.assertj.core.api.Assertions.assertThat;
27+
import static org.assertj.core.api.Assertions.assertThatThrownBy;
28+
import static org.assertj.core.api.Assertions.entry;
2729

2830
/**
2931
* Tests for {@link OAuth2AuthorizeRequest}.
@@ -58,6 +60,13 @@ public void withClientRegistrationIdWhenPrincipalIsNullThenThrowIllegalArgumentE
5860
.hasMessage("principal cannot be null");
5961
}
6062

63+
@Test
64+
public void withClientRegistrationIdWhenPrincipalNameIsNullThenThrowIllegalArgumentException() {
65+
assertThatThrownBy(() -> OAuth2AuthorizeRequest.withClientRegistrationId(this.clientRegistration.getRegistrationId()).principal((String) null).build())
66+
.isInstanceOf(IllegalArgumentException.class)
67+
.hasMessage("principalName cannot be empty");
68+
}
69+
6170
@Test
6271
public void withClientRegistrationIdWhenAllValuesProvidedThenAllValuesAreSet() {
6372
OAuth2AuthorizeRequest authorizeRequest = OAuth2AuthorizeRequest.withClientRegistrationId(this.clientRegistration.getRegistrationId())
@@ -89,4 +98,15 @@ public void withAuthorizedClientWhenAllValuesProvidedThenAllValuesAreSet() {
8998
assertThat(authorizeRequest.getPrincipal()).isEqualTo(this.principal);
9099
assertThat(authorizeRequest.getAttributes()).contains(entry("name1", "value1"), entry("name2", "value2"));
91100
}
101+
102+
@Test
103+
public void withClientRegistrationIdWhenPrincipalNameProvidedThenPrincipalCreated() {
104+
OAuth2AuthorizeRequest authorizeRequest = OAuth2AuthorizeRequest.withClientRegistrationId(this.clientRegistration.getRegistrationId())
105+
.principal("principalName")
106+
.build();
107+
108+
assertThat(authorizeRequest.getClientRegistrationId()).isEqualTo(this.clientRegistration.getRegistrationId());
109+
assertThat(authorizeRequest.getAuthorizedClient()).isNull();
110+
assertThat(authorizeRequest.getPrincipal().getName()).isEqualTo("principalName");
111+
}
92112
}

0 commit comments

Comments
 (0)