Skip to content

Commit cdf64c3

Browse files
committed
Polish AuthnRequestsSigned support
Issue gh-12604
1 parent 59d62d6 commit cdf64c3

File tree

3 files changed

+29
-14
lines changed

3 files changed

+29
-14
lines changed

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

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ public Builder mutate() {
148148
.singleLogoutServiceLocation(this.singleLogoutServiceLocation)
149149
.singleLogoutServiceResponseLocation(this.singleLogoutServiceResponseLocation)
150150
.singleLogoutServiceBindings((c) -> c.addAll(this.singleLogoutServiceBindings))
151-
.nameIdFormat(this.nameIdFormat)
151+
.nameIdFormat(this.nameIdFormat).authnRequestsSigned(this.authnRequestsSigned)
152152
.assertingPartyDetails((assertingParty) -> assertingParty.entityId(party.getEntityId())
153153
.wantAuthnRequestsSigned(party.getWantAuthnRequestsSigned())
154154
.signingAlgorithms((algorithms) -> algorithms.addAll(party.getSigningAlgorithms()))
@@ -285,12 +285,20 @@ public String getNameIdFormat() {
285285
}
286286

287287
/**
288-
* Get the WantAuthnRequestsSigned setting
289-
* @return the WantAuthnRequestsSigned setting
290-
* @since 6.0
288+
* Get the <a href=
289+
* "https://docs.oasis-open.org/security/saml/v2.0/saml-metadata-2.0-os.pdf#page=18">
290+
* AuthnRequestsSigned</a> setting. If {@code true}, the relying party will sign all
291+
* AuthnRequests, regardless of asserting party preference.
292+
*
293+
* <p>
294+
* Note that Spring Security will sign the request if either
295+
* {@link #isAuthnRequestsSigned()} is {@code true} or
296+
* {@link AssertingPartyDetails#getWantAuthnRequestsSigned()} is {@code true}.
297+
* @return the relying-party preference
298+
* @since 6.1
291299
*/
292300
public boolean isAuthnRequestsSigned() {
293-
return authnRequestsSigned;
301+
return this.authnRequestsSigned;
294302
}
295303

296304
/**
@@ -368,8 +376,7 @@ public static Builder withRelyingPartyRegistration(RelyingPartyRegistration regi
368376
.singleLogoutServiceLocation(registration.getSingleLogoutServiceLocation())
369377
.singleLogoutServiceResponseLocation(registration.getSingleLogoutServiceResponseLocation())
370378
.singleLogoutServiceBindings((c) -> c.addAll(registration.getSingleLogoutServiceBindings()))
371-
.nameIdFormat(registration.getNameIdFormat())
372-
.authnRequestsSigned(registration.isAuthnRequestsSigned())
379+
.nameIdFormat(registration.getNameIdFormat()).authnRequestsSigned(registration.isAuthnRequestsSigned())
373380
.assertingPartyDetails((assertingParty) -> assertingParty
374381
.entityId(registration.getAssertingPartyDetails().getEntityId())
375382
.wantAuthnRequestsSigned(registration.getAssertingPartyDetails().getWantAuthnRequestsSigned())
@@ -990,10 +997,17 @@ public Builder nameIdFormat(String nameIdFormat) {
990997
}
991998

992999
/**
993-
* Set the AuthnRequestsSigned setting
994-
* @param authnRequestsSigned
1000+
* Set the <a href=
1001+
* "https://docs.oasis-open.org/security/saml/v2.0/saml-metadata-2.0-os.pdf#page=18">
1002+
* AuthnRequestsSigned</a> setting. If {@code true}, the relying party will sign
1003+
* all AuthnRequests, 301 asserting party preference.
1004+
*
1005+
* <p>
1006+
* Note that Spring Security will sign the request if either
1007+
* {@link #isAuthnRequestsSigned()} is {@code true} or
1008+
* {@link AssertingPartyDetails#getWantAuthnRequestsSigned()} is {@code true}.
9951009
* @return the {@link Builder} for further configuration
996-
* @since 6.0
1010+
* @since 6.1
9971011
*/
9981012
public Builder authnRequestsSigned(Boolean authnRequestsSigned) {
9991013
this.authnRequestsSigned = authnRequestsSigned;

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,8 @@ <T extends AbstractSaml2AuthenticationRequest> T resolve(HttpServletRequest requ
142142
String relayState = this.relayStateResolver.convert(request);
143143
Saml2MessageBinding binding = registration.getAssertingPartyDetails().getSingleSignOnServiceBinding();
144144
if (binding == Saml2MessageBinding.POST) {
145-
if (registration.getAssertingPartyDetails().getWantAuthnRequestsSigned() || registration.isAuthnRequestsSigned()) {
145+
if (registration.getAssertingPartyDetails().getWantAuthnRequestsSigned()
146+
|| registration.isAuthnRequestsSigned()) {
146147
OpenSamlSigningUtils.sign(authnRequest, registration);
147148
}
148149
String xml = serialize(authnRequest);
@@ -156,7 +157,8 @@ <T extends AbstractSaml2AuthenticationRequest> T resolve(HttpServletRequest requ
156157
Saml2RedirectAuthenticationRequest.Builder builder = Saml2RedirectAuthenticationRequest
157158
.withRelyingPartyRegistration(registration).samlRequest(deflatedAndEncoded).relayState(relayState)
158159
.id(authnRequest.getID());
159-
if (registration.getAssertingPartyDetails().getWantAuthnRequestsSigned() || registration.isAuthnRequestsSigned()) {
160+
if (registration.getAssertingPartyDetails().getWantAuthnRequestsSigned()
161+
|| registration.isAuthnRequestsSigned()) {
160162
Map<String, String> parameters = OpenSamlSigningUtils.sign(registration)
161163
.param(Saml2ParameterNames.SAML_REQUEST, deflatedAndEncoded)
162164
.param(Saml2ParameterNames.RELAY_STATE, relayState).parameters();

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,7 @@ public class RelyingPartyRegistrationTests {
2929
@Test
3030
public void withRelyingPartyRegistrationWorks() {
3131
RelyingPartyRegistration registration = TestRelyingPartyRegistrations.relyingPartyRegistration()
32-
.nameIdFormat("format")
33-
.authnRequestsSigned(true)
32+
.nameIdFormat("format").authnRequestsSigned(true)
3433
.assertingPartyDetails((a) -> a.singleSignOnServiceBinding(Saml2MessageBinding.POST))
3534
.assertingPartyDetails((a) -> a.wantAuthnRequestsSigned(false))
3635
.assertingPartyDetails((a) -> a.signingAlgorithms((algs) -> algs.add("alg")))

0 commit comments

Comments
 (0)