diff --git a/saml2/saml2-service-provider/src/main/java/org/springframework/security/saml2/provider/service/metadata/OpenSamlMetadataResolver.java b/saml2/saml2-service-provider/src/main/java/org/springframework/security/saml2/provider/service/metadata/OpenSamlMetadataResolver.java index 731b9c8cf80..6438c414339 100644 --- a/saml2/saml2-service-provider/src/main/java/org/springframework/security/saml2/provider/service/metadata/OpenSamlMetadataResolver.java +++ b/saml2/saml2-service-provider/src/main/java/org/springframework/security/saml2/provider/service/metadata/OpenSamlMetadataResolver.java @@ -82,6 +82,7 @@ private SPSSODescriptor buildSpSsoDescriptor(RelyingPartyRegistration registrati SPSSODescriptor spSsoDescriptor = build(SPSSODescriptor.DEFAULT_ELEMENT_NAME); spSsoDescriptor.addSupportedProtocol(SAMLConstants.SAML20P_NS); spSsoDescriptor.setWantAssertionsSigned(true); + spSsoDescriptor.setAuthnRequestsSigned(registration.getAssertingPartyDetails().getWantAuthnRequestsSigned()); spSsoDescriptor.getKeyDescriptors() .addAll(buildKeys(registration.getSigningX509Credentials(), UsageType.SIGNING)); spSsoDescriptor.getKeyDescriptors() diff --git a/saml2/saml2-service-provider/src/test/java/org/springframework/security/saml2/provider/service/metadata/OpenSamlMetadataResolverTests.java b/saml2/saml2-service-provider/src/test/java/org/springframework/security/saml2/provider/service/metadata/OpenSamlMetadataResolverTests.java index f5e6e445602..a4d1e49124a 100644 --- a/saml2/saml2-service-provider/src/test/java/org/springframework/security/saml2/provider/service/metadata/OpenSamlMetadataResolverTests.java +++ b/saml2/saml2-service-provider/src/test/java/org/springframework/security/saml2/provider/service/metadata/OpenSamlMetadataResolverTests.java @@ -71,6 +71,28 @@ public void resolveWhenRelyingPartyNameIDFormatThenMetadataMatches() { } @Test + public void setAuthnRequestsSignedToTrue() { + RelyingPartyRegistration relyingPartyRegistration = TestRelyingPartyRegistrations.full() + .assertingPartyDetails((party) -> party.wantAuthnRequestsSigned(true)) + .build(); + OpenSamlMetadataResolver openSamlMetadataResolver = new OpenSamlMetadataResolver(); + String metadata = openSamlMetadataResolver.resolve(relyingPartyRegistration); + assertThat(metadata) + .contains("AuthnRequestsSigned=\"true\""); + } + + @Test + public void setAuthnRequestsSignedToFalse() { + RelyingPartyRegistration relyingPartyRegistration = TestRelyingPartyRegistrations.full() + .assertingPartyDetails((party) -> party.wantAuthnRequestsSigned(true)) + .build(); + OpenSamlMetadataResolver openSamlMetadataResolver = new OpenSamlMetadataResolver(); + String metadata = openSamlMetadataResolver.resolve(relyingPartyRegistration); + assertThat(metadata) + .contains("AuthnRequestsSigned=\"false\""); + } + + @Test public void resolveWhenRelyingPartyNoLogoutThenMetadataMatches() { RelyingPartyRegistration relyingPartyRegistration = TestRelyingPartyRegistrations.full() .singleLogoutServiceLocation(null).nameIdFormat("format").build(); @@ -78,5 +100,4 @@ public void resolveWhenRelyingPartyNoLogoutThenMetadataMatches() { String metadata = openSamlMetadataResolver.resolve(relyingPartyRegistration); assertThat(metadata).doesNotContain("ResponseLocation"); } - }