Skip to content

Commit 85b0e46

Browse files
committed
Add missing calls to principalName
Issue gh-8054
1 parent 3766322 commit 85b0e46

File tree

5 files changed

+104
-4
lines changed

5 files changed

+104
-4
lines changed

test/src/main/java/org/springframework/security/test/web/reactive/server/SecurityMockServerConfigurers.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -785,16 +785,18 @@ public void beforeServerCreated(WebHttpHandlerBuilder builder) {
785785
.clientRegistration(this.clientRegistration)
786786
.principalName(token.getPrincipal().getName())
787787
.beforeServerCreated(builder);
788-
mockAuthentication(getToken()).beforeServerCreated(builder);
788+
mockAuthentication(token).beforeServerCreated(builder);
789789
}
790790

791791
@Override
792792
public void afterConfigureAdded(WebTestClient.MockServerSpec<?> serverSpec) {
793+
OAuth2AuthenticationToken token = getToken();
793794
mockOAuth2Client()
794795
.accessToken(this.accessToken)
795796
.clientRegistration(this.clientRegistration)
797+
.principalName(token.getPrincipal().getName())
796798
.afterConfigureAdded(serverSpec);
797-
mockAuthentication(getToken()).afterConfigureAdded(serverSpec);
799+
mockAuthentication(token).afterConfigureAdded(serverSpec);
798800
}
799801

800802
@Override
@@ -806,6 +808,7 @@ public void afterConfigurerAdded(
806808
mockOAuth2Client()
807809
.accessToken(this.accessToken)
808810
.clientRegistration(this.clientRegistration)
811+
.principalName(token.getPrincipal().getName())
809812
.afterConfigurerAdded(builder, httpHandlerBuilder, connector);
810813
mockAuthentication(token).afterConfigurerAdded(builder, httpHandlerBuilder, connector);
811814
}
@@ -953,18 +956,21 @@ public void beforeServerCreated(WebHttpHandlerBuilder builder) {
953956
OAuth2AuthenticationToken token = getToken();
954957
mockOAuth2Client()
955958
.accessToken(this.accessToken)
959+
.principalName(token.getPrincipal().getName())
956960
.clientRegistration(this.clientRegistration)
957961
.beforeServerCreated(builder);
958-
mockAuthentication(getToken()).beforeServerCreated(builder);
962+
mockAuthentication(token).beforeServerCreated(builder);
959963
}
960964

961965
@Override
962966
public void afterConfigureAdded(WebTestClient.MockServerSpec<?> serverSpec) {
967+
OAuth2AuthenticationToken token = getToken();
963968
mockOAuth2Client()
964969
.accessToken(this.accessToken)
970+
.principalName(token.getPrincipal().getName())
965971
.clientRegistration(this.clientRegistration)
966972
.afterConfigureAdded(serverSpec);
967-
mockAuthentication(getToken()).afterConfigureAdded(serverSpec);
973+
mockAuthentication(token).afterConfigureAdded(serverSpec);
968974
}
969975

970976
@Override
@@ -975,6 +981,7 @@ public void afterConfigurerAdded(
975981
OAuth2AuthenticationToken token = getToken();
976982
mockOAuth2Client()
977983
.accessToken(this.accessToken)
984+
.principalName(token.getPrincipal().getName())
978985
.clientRegistration(this.clientRegistration)
979986
.afterConfigurerAdded(builder, httpHandlerBuilder, connector);
980987
mockAuthentication(token).afterConfigurerAdded(builder, httpHandlerBuilder, connector);

test/src/test/java/org/springframework/security/test/web/reactive/server/SecurityMockServerConfigurersOAuth2LoginTests.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,34 @@ public void oauth2LoginWhenAttributeSpecifiedThenUserHasAttribute() {
131131
.containsEntry("iss", "https://idp.example.org");
132132
}
133133

134+
@Test
135+
public void oauth2LoginWhenNameSpecifiedThenUserHasName() throws Exception {
136+
OAuth2User oauth2User = new DefaultOAuth2User(
137+
AuthorityUtils.commaSeparatedStringToAuthorityList("SCOPE_read"),
138+
Collections.singletonMap("custom-attribute", "test-subject"),
139+
"custom-attribute");
140+
141+
this.client.mutateWith(mockOAuth2Login()
142+
.oauth2User(oauth2User))
143+
.get().uri("/token")
144+
.exchange()
145+
.expectStatus().isOk();
146+
147+
OAuth2AuthenticationToken token = this.controller.token;
148+
assertThat(token.getPrincipal().getName())
149+
.isEqualTo("test-subject");
150+
151+
this.client.mutateWith(mockOAuth2Login()
152+
.oauth2User(oauth2User))
153+
.get().uri("/client")
154+
.exchange()
155+
.expectStatus().isOk();
156+
157+
OAuth2AuthorizedClient client = this.controller.authorizedClient;
158+
assertThat(client.getPrincipalName())
159+
.isEqualTo("test-subject");
160+
}
161+
134162
@Test
135163
public void oauth2LoginWhenOAuth2UserSpecifiedThenLastCalledTakesPrecedence() throws Exception {
136164
OAuth2User oauth2User = new DefaultOAuth2User(

test/src/test/java/org/springframework/security/test/web/reactive/server/SecurityMockServerConfigurersOidcLoginTests.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import org.springframework.security.oauth2.client.web.reactive.result.method.annotation.OAuth2AuthorizedClientArgumentResolver;
3737
import org.springframework.security.oauth2.client.web.server.ServerOAuth2AuthorizedClientRepository;
3838
import org.springframework.security.oauth2.client.web.server.WebSessionServerOAuth2AuthorizedClientRepository;
39+
import org.springframework.security.oauth2.core.oidc.OidcIdToken;
3940
import org.springframework.security.oauth2.core.oidc.user.DefaultOidcUser;
4041
import org.springframework.security.oauth2.core.oidc.user.OidcUser;
4142
import org.springframework.security.web.server.context.SecurityContextServerWebExchangeWebFilter;
@@ -45,6 +46,7 @@
4546

4647
import static org.assertj.core.api.Assertions.assertThat;
4748
import static org.springframework.security.oauth2.core.oidc.TestOidcIdTokens.idToken;
49+
import static org.springframework.security.test.web.reactive.server.SecurityMockServerConfigurers.mockOAuth2Login;
4850
import static org.springframework.security.test.web.reactive.server.SecurityMockServerConfigurers.mockOidcLogin;
4951
import static org.springframework.security.test.web.reactive.server.SecurityMockServerConfigurers.springSecurity;
5052

@@ -146,6 +148,34 @@ public void oidcLoginWhenUserInfoSpecifiedThenUserHasClaims() throws Exception {
146148
.containsEntry("email", "email@email");
147149
}
148150

151+
@Test
152+
public void oidcUserWhenNameSpecifiedThenUserHasName() throws Exception {
153+
OidcUser oidcUser = new DefaultOidcUser(
154+
AuthorityUtils.commaSeparatedStringToAuthorityList("SCOPE_read"),
155+
OidcIdToken.withTokenValue("id-token").claim("custom-attribute", "test-subject").build(),
156+
"custom-attribute");
157+
158+
this.client.mutateWith(mockOAuth2Login()
159+
.oauth2User(oidcUser))
160+
.get().uri("/token")
161+
.exchange()
162+
.expectStatus().isOk();
163+
164+
OAuth2AuthenticationToken token = this.controller.token;
165+
assertThat(token.getPrincipal().getName())
166+
.isEqualTo("test-subject");
167+
168+
this.client.mutateWith(mockOAuth2Login()
169+
.oauth2User(oidcUser))
170+
.get().uri("/client")
171+
.exchange()
172+
.expectStatus().isOk();
173+
174+
OAuth2AuthorizedClient client = this.controller.authorizedClient;
175+
assertThat(client.getPrincipalName())
176+
.isEqualTo("test-subject");
177+
}
178+
149179
// gh-7794
150180
@Test
151181
public void oidcLoginWhenOidcUserSpecifiedThenLastCalledTakesPrecedence() throws Exception {

test/src/test/java/org/springframework/security/test/web/servlet/request/SecurityMockMvcRequestPostProcessorsOAuth2LoginTests.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,10 @@ public void oauth2LoginWhenNameSpecifiedThenUserHasName() throws Exception {
130130
this.mvc.perform(get("/name")
131131
.with(oauth2Login().oauth2User(oauth2User)))
132132
.andExpect(content().string("test-subject"));
133+
134+
this.mvc.perform(get("/client-name")
135+
.with(oauth2Login().oauth2User(oauth2User)))
136+
.andExpect(content().string("test-subject"));
133137
}
134138

135139
@Test
@@ -193,6 +197,11 @@ String authorizedClient(@RegisteredOAuth2AuthorizedClient OAuth2AuthorizedClient
193197
return authorizedClient.getClientRegistration().getClientId();
194198
}
195199

200+
@GetMapping("/client-name")
201+
String clientName(@RegisteredOAuth2AuthorizedClient OAuth2AuthorizedClient authorizedClient) {
202+
return authorizedClient.getPrincipalName();
203+
}
204+
196205
@GetMapping("/attributes/{attribute}")
197206
String attributes(
198207
@AuthenticationPrincipal OAuth2User oauth2User, @PathVariable("attribute") String attribute) {

test/src/test/java/org/springframework/security/test/web/servlet/request/SecurityMockMvcRequestPostProcessorsOidcLoginTests.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository;
3939
import org.springframework.security.oauth2.client.web.HttpSessionOAuth2AuthorizedClientRepository;
4040
import org.springframework.security.oauth2.client.web.OAuth2AuthorizedClientRepository;
41+
import org.springframework.security.oauth2.core.oidc.OidcIdToken;
4142
import org.springframework.security.oauth2.core.oidc.user.DefaultOidcUser;
4243
import org.springframework.security.oauth2.core.oidc.user.OidcUser;
4344
import org.springframework.security.test.context.TestSecurityContextHolder;
@@ -129,6 +130,26 @@ public void oidcLoginWhenUserInfoSpecifiedThenUserHasClaims() throws Exception {
129130
.andExpect(content().string("email@email"));
130131
}
131132

133+
@Test
134+
public void oidcLoginWhenNameSpecifiedThenUserHasName() throws Exception {
135+
OidcUser oidcUser = new DefaultOidcUser(
136+
AuthorityUtils.commaSeparatedStringToAuthorityList("SCOPE_read"),
137+
OidcIdToken.withTokenValue("id-token").claim("custom-attribute", "test-subject").build(),
138+
"custom-attribute");
139+
140+
this.mvc.perform(get("/id-token/custom-attribute")
141+
.with(oidcLogin().oidcUser(oidcUser)))
142+
.andExpect(content().string("test-subject"));
143+
144+
this.mvc.perform(get("/name")
145+
.with(oidcLogin().oidcUser(oidcUser)))
146+
.andExpect(content().string("test-subject"));
147+
148+
this.mvc.perform(get("/client-name")
149+
.with(oidcLogin().oidcUser(oidcUser)))
150+
.andExpect(content().string("test-subject"));
151+
}
152+
132153
// gh-7794
133154
@Test
134155
public void oidcLoginWhenOidcUserSpecifiedThenLastCalledTakesPrecedence() throws Exception {
@@ -179,6 +200,11 @@ String name(@AuthenticationPrincipal OidcUser oidcUser) {
179200
return oidcUser.getName();
180201
}
181202

203+
@GetMapping("/client-name")
204+
String clientName(@RegisteredOAuth2AuthorizedClient OAuth2AuthorizedClient authorizedClient) {
205+
return authorizedClient.getPrincipalName();
206+
}
207+
182208
@GetMapping("/access-token")
183209
String authorizedClient(@RegisteredOAuth2AuthorizedClient OAuth2AuthorizedClient authorizedClient) {
184210
return authorizedClient.getAccessToken().getTokenValue();

0 commit comments

Comments
 (0)