Skip to content

Commit da612dd

Browse files
committed
make SP NameIdPolicy configurable in RelyingPartyRegistration
closes spring-projectsgh-9115
1 parent 3e05e0d commit da612dd

File tree

6 files changed

+28
-51
lines changed

6 files changed

+28
-51
lines changed

saml2/saml2-service-provider/src/main/java/org/springframework/security/saml2/provider/service/authentication/OpenSamlAuthenticationRequestFactory.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ public Saml2RedirectAuthenticationRequest createRedirectAuthenticationRequest(
167167
private AuthnRequest createAuthnRequest(Saml2AuthenticationRequestContext context) {
168168
return createAuthnRequest(context.getIssuer(), context.getDestination(),
169169
context.getAssertionConsumerServiceUrl(), this.protocolBindingResolver.convert(context),
170-
context.getRelyingPartyRegistration().getNameIDFormat());
170+
context.getRelyingPartyRegistration().getNameIdFormat());
171171
}
172172

173173
private AuthnRequest createAuthnRequest(String issuer, String destination, String assertionConsumerServiceUrl,

saml2/saml2-service-provider/src/main/java/org/springframework/security/saml2/provider/service/metadata/OpenSamlMetadataResolver.java

+6-10
Original file line numberDiff line numberDiff line change
@@ -87,13 +87,10 @@ private SPSSODescriptor buildSpSsoDescriptor(RelyingPartyRegistration registrati
8787
spSsoDescriptor.getKeyDescriptors()
8888
.addAll(buildKeys(registration.getDecryptionX509Credentials(), UsageType.ENCRYPTION));
8989
spSsoDescriptor.getAssertionConsumerServices().add(buildAssertionConsumerService(registration));
90-
<<<<<<< Upstream, based on upstream/main
9190
spSsoDescriptor.getSingleLogoutServices().add(buildSingleLogoutService(registration));
92-
=======
93-
if (registration.getNameIDFormat() != null) {
91+
if (registration.getNameIdFormat() != null) {
9492
spSsoDescriptor.getNameIDFormats().add(buildNameIDFormat(registration));
9593
}
96-
>>>>>>> 7056a31 make SP NameIDPolicy configurable in RelyingPartyRegistration
9794
return spSsoDescriptor;
9895
}
9996

@@ -132,19 +129,18 @@ private AssertionConsumerService buildAssertionConsumerService(RelyingPartyRegis
132129
return assertionConsumerService;
133130
}
134131

135-
<<<<<<< Upstream, based on upstream/main
136132
private SingleLogoutService buildSingleLogoutService(RelyingPartyRegistration registration) {
137133
SingleLogoutService singleLogoutService = build(SingleLogoutService.DEFAULT_ELEMENT_NAME);
138134
singleLogoutService.setLocation(registration.getSingleLogoutServiceLocation());
139135
singleLogoutService.setResponseLocation(registration.getSingleLogoutServiceResponseLocation());
140136
singleLogoutService.setBinding(registration.getSingleLogoutServiceBinding().getUrn());
141137
return singleLogoutService;
142-
=======
138+
}
139+
143140
private NameIDFormat buildNameIDFormat(RelyingPartyRegistration registration) {
144-
NameIDFormat nameIDFormat = build(NameIDFormat.DEFAULT_ELEMENT_NAME);
145-
nameIDFormat.setFormat(registration.getNameIDFormat());
146-
return nameIDFormat;
147-
>>>>>>> 7056a31 make SP NameIDPolicy configurable in RelyingPartyRegistration
141+
NameIDFormat nameIdFormat = build(NameIDFormat.DEFAULT_ELEMENT_NAME);
142+
nameIdFormat.setFormat(registration.getNameIdFormat());
143+
return nameIdFormat;
148144
}
149145

150146
@SuppressWarnings("unchecked")

saml2/saml2-service-provider/src/main/java/org/springframework/security/saml2/provider/service/registration/RelyingPartyRegistration.java

+17-36
Original file line numberDiff line numberDiff line change
@@ -81,15 +81,13 @@ public final class RelyingPartyRegistration {
8181

8282
private final Saml2MessageBinding assertionConsumerServiceBinding;
8383

84-
<<<<<<< Upstream, based on upstream/main
8584
private final String singleLogoutServiceLocation;
8685

8786
private final String singleLogoutServiceResponseLocation;
8887

8988
private final Saml2MessageBinding singleLogoutServiceBinding;
90-
=======
89+
9190
private final String nameIdFormat;
92-
>>>>>>> 7056a31 make SP NameIDPolicy configurable in RelyingPartyRegistration
9391

9492
private final ProviderDetails providerDetails;
9593

@@ -100,13 +98,9 @@ public final class RelyingPartyRegistration {
10098
private final Collection<Saml2X509Credential> signingX509Credentials;
10199

102100
private RelyingPartyRegistration(String registrationId, String entityId, String assertionConsumerServiceLocation,
103-
<<<<<<< Upstream, based on upstream/main
104101
Saml2MessageBinding assertionConsumerServiceBinding, String singleLogoutServiceLocation,
105102
String singleLogoutServiceResponseLocation, Saml2MessageBinding singleLogoutServiceBinding,
106-
ProviderDetails providerDetails,
107-
=======
108-
Saml2MessageBinding assertionConsumerServiceBinding, String nameIdFormat, ProviderDetails providerDetails,
109-
>>>>>>> 7056a31 make SP NameIDPolicy configurable in RelyingPartyRegistration
103+
ProviderDetails providerDetails, String nameIdFormat,
110104
Collection<org.springframework.security.saml2.credentials.Saml2X509Credential> credentials,
111105
Collection<Saml2X509Credential> decryptionX509Credentials,
112106
Collection<Saml2X509Credential> signingX509Credentials) {
@@ -134,13 +128,10 @@ private RelyingPartyRegistration(String registrationId, String entityId, String
134128
this.entityId = entityId;
135129
this.assertionConsumerServiceLocation = assertionConsumerServiceLocation;
136130
this.assertionConsumerServiceBinding = assertionConsumerServiceBinding;
137-
<<<<<<< Upstream, based on upstream/main
138131
this.singleLogoutServiceLocation = singleLogoutServiceLocation;
139132
this.singleLogoutServiceResponseLocation = singleLogoutServiceResponseLocation;
140133
this.singleLogoutServiceBinding = singleLogoutServiceBinding;
141-
=======
142134
this.nameIdFormat = nameIdFormat;
143-
>>>>>>> 7056a31 make SP NameIDPolicy configurable in RelyingPartyRegistration
144135
this.providerDetails = providerDetails;
145136
this.credentials = Collections.unmodifiableList(new LinkedList<>(credentials));
146137
this.decryptionX509Credentials = Collections.unmodifiableList(new LinkedList<>(decryptionX509Credentials));
@@ -201,7 +192,6 @@ public Saml2MessageBinding getAssertionConsumerServiceBinding() {
201192
}
202193

203194
/**
204-
<<<<<<< Upstream, based on upstream/main
205195
* Get the <a href=
206196
* "https://docs.oasis-open.org/security/saml/v2.0/saml-metadata-2.0-os.pdf#page=7">SingleLogoutService
207197
* Binding</a>
@@ -245,14 +235,15 @@ public String getSingleLogoutServiceLocation() {
245235
*/
246236
public String getSingleLogoutServiceResponseLocation() {
247237
return this.singleLogoutServiceResponseLocation;
248-
=======
238+
}
239+
240+
/**
249241
* Get the NameID format.
250242
* @return the NameID format
251243
* @since 5.7
252244
*/
253245
public String getNameIdFormat() {
254246
return this.nameIdFormat;
255-
>>>>>>> 7056a31 make SP NameIDPolicy configurable in RelyingPartyRegistration
256247
}
257248

258249
/**
@@ -442,13 +433,10 @@ public static Builder withRelyingPartyRegistration(RelyingPartyRegistration regi
442433
.decryptionX509Credentials((c) -> c.addAll(registration.getDecryptionX509Credentials()))
443434
.assertionConsumerServiceLocation(registration.getAssertionConsumerServiceLocation())
444435
.assertionConsumerServiceBinding(registration.getAssertionConsumerServiceBinding())
445-
<<<<<<< Upstream, based on upstream/main
446436
.singleLogoutServiceLocation(registration.getSingleLogoutServiceLocation())
447437
.singleLogoutServiceResponseLocation(registration.getSingleLogoutServiceResponseLocation())
448438
.singleLogoutServiceBinding(registration.getSingleLogoutServiceBinding())
449-
=======
450-
.nameIDFormat(registration.getNameIdFormat())
451-
>>>>>>> 7056a31 make SP NameIDPolicy configurable in RelyingPartyRegistration
439+
.nameIdFormat(registration.getNameIdFormat())
452440
.assertingPartyDetails((assertingParty) -> assertingParty
453441
.entityId(registration.getAssertingPartyDetails().getEntityId())
454442
.wantAuthnRequestsSigned(registration.getAssertingPartyDetails().getWantAuthnRequestsSigned())
@@ -1037,15 +1025,13 @@ public static final class Builder {
10371025

10381026
private Saml2MessageBinding assertionConsumerServiceBinding = Saml2MessageBinding.POST;
10391027

1040-
<<<<<<< Upstream, based on upstream/main
10411028
private String singleLogoutServiceLocation = "{baseUrl}/logout/saml2/slo";
10421029

10431030
private String singleLogoutServiceResponseLocation;
10441031

10451032
private Saml2MessageBinding singleLogoutServiceBinding = Saml2MessageBinding.POST;
1046-
=======
1047-
private String nameIDFormat = null;
1048-
>>>>>>> 7056a31 make SP NameIDPolicy configurable in RelyingPartyRegistration
1033+
1034+
private String nameIdFormat = null;
10491035

10501036
private ProviderDetails.Builder providerDetails = new ProviderDetails.Builder();
10511037

@@ -1151,7 +1137,6 @@ public Builder assertionConsumerServiceBinding(Saml2MessageBinding assertionCons
11511137
}
11521138

11531139
/**
1154-
<<<<<<< Upstream, based on upstream/main
11551140
* Set the <a href=
11561141
* "https://docs.oasis-open.org/security/saml/v2.0/saml-metadata-2.0-os.pdf#page=7">SingleLogoutService
11571142
* Binding</a>
@@ -1200,15 +1185,17 @@ public Builder singleLogoutServiceLocation(String singleLogoutServiceLocation) {
12001185
*/
12011186
public Builder singleLogoutServiceResponseLocation(String singleLogoutServiceResponseLocation) {
12021187
this.singleLogoutServiceResponseLocation = singleLogoutServiceResponseLocation;
1203-
=======
1188+
return this;
1189+
}
1190+
1191+
/**
12041192
* Set the NameID format
1205-
* @param nameIDFormat
1193+
* @param nameIdFormat
12061194
* @return the {@link Builder} for further configuration
1207-
* @since 5.5
1195+
* @since 5.7
12081196
*/
1209-
public Builder nameIDFormat(String nameIDFormat) {
1210-
this.nameIDFormat = nameIDFormat;
1211-
>>>>>>> 7056a31 make SP NameIDPolicy configurable in RelyingPartyRegistration
1197+
public Builder nameIdFormat(String nameIdFormat) {
1198+
this.nameIdFormat = nameIdFormat;
12121199
return this;
12131200
}
12141201

@@ -1358,16 +1345,10 @@ public RelyingPartyRegistration build() {
13581345
this.singleLogoutServiceResponseLocation = this.singleLogoutServiceLocation;
13591346
}
13601347
return new RelyingPartyRegistration(this.registrationId, this.entityId,
1361-
<<<<<<< Upstream, based on upstream/main
13621348
this.assertionConsumerServiceLocation, this.assertionConsumerServiceBinding,
13631349
this.singleLogoutServiceLocation, this.singleLogoutServiceResponseLocation,
1364-
this.singleLogoutServiceBinding, this.providerDetails.build(), this.credentials,
1350+
this.singleLogoutServiceBinding, this.providerDetails.build(), this.nameIdFormat, this.credentials,
13651351
this.decryptionX509Credentials, this.signingX509Credentials);
1366-
=======
1367-
this.assertionConsumerServiceLocation, this.assertionConsumerServiceBinding, this.nameIDFormat,
1368-
this.providerDetails.build(), this.credentials, this.decryptionX509Credentials,
1369-
this.signingX509Credentials);
1370-
>>>>>>> 7056a31 make SP NameIDPolicy configurable in RelyingPartyRegistration
13711352
}
13721353

13731354
}

saml2/saml2-service-provider/src/test/java/org/springframework/security/saml2/provider/service/authentication/OpenSamlAuthenticationRequestFactoryTests.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ public void createAuthenticationRequestWhenSetUriThenReturnsCorrectBinding() {
192192

193193
@Test
194194
public void createAuthenticationRequestWhenSetNameIDPolicyThenReturnsCorrectNameIDPolicy() {
195-
RelyingPartyRegistration registration = TestRelyingPartyRegistrations.full().nameIDFormat("format").build();
195+
RelyingPartyRegistration registration = TestRelyingPartyRegistrations.full().nameIdFormat("format").build();
196196
this.context = this.contextBuilder.relayState("Relay State Value").relyingPartyRegistration(registration)
197197
.build();
198198
AuthnRequest authn = getAuthNRequest(Saml2MessageBinding.POST);

saml2/saml2-service-provider/src/test/java/org/springframework/security/saml2/provider/service/metadata/OpenSamlMetadataResolverTests.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public void resolveWhenRelyingPartyNoCredentialsThenMetadataMatches() {
6363

6464
@Test
6565
public void resolveWhenRelyingPartyNameIDFormatThenMetadataMatches() {
66-
RelyingPartyRegistration relyingPartyRegistration = TestRelyingPartyRegistrations.full().nameIDFormat("format")
66+
RelyingPartyRegistration relyingPartyRegistration = TestRelyingPartyRegistrations.full().nameIdFormat("format")
6767
.build();
6868
OpenSamlMetadataResolver openSamlMetadataResolver = new OpenSamlMetadataResolver();
6969
String metadata = openSamlMetadataResolver.resolve(relyingPartyRegistration);

saml2/saml2-service-provider/src/test/java/org/springframework/security/saml2/provider/service/registration/RelyingPartyRegistrationTests.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public class RelyingPartyRegistrationTests {
2828
@Test
2929
public void withRelyingPartyRegistrationWorks() {
3030
RelyingPartyRegistration registration = TestRelyingPartyRegistrations.relyingPartyRegistration()
31-
.nameIDFormat("format")
31+
.nameIdFormat("format")
3232
.assertingPartyDetails((a) -> a.singleSignOnServiceBinding(Saml2MessageBinding.POST))
3333
.assertingPartyDetails((a) -> a.wantAuthnRequestsSigned(false))
3434
.assertingPartyDetails((a) -> a.signingAlgorithms((algs) -> algs.add("alg")))
@@ -75,7 +75,7 @@ private void compareRegistrations(RelyingPartyRegistration registration, Relying
7575
.isEqualTo(registration.getAssertingPartyDetails().getVerificationX509Credentials());
7676
assertThat(copy.getAssertingPartyDetails().getSigningAlgorithms())
7777
.isEqualTo(registration.getAssertingPartyDetails().getSigningAlgorithms());
78-
assertThat(copy.getNameIDFormat()).isEqualTo(registration.getNameIDFormat());
78+
assertThat(copy.getNameIdFormat()).isEqualTo(registration.getNameIdFormat());
7979
}
8080

8181
@Test

0 commit comments

Comments
 (0)