Skip to content

Commit a884a45

Browse files
Roman_Dyndynmarcusdacoregio
authored andcommitted
Fix parsing of GET SAML logout requests
1 parent 3422476 commit a884a45

File tree

2 files changed

+22
-1
lines changed

2 files changed

+22
-1
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ private Saml2LogoutRequestValidatorParameters logoutRequestByRegistration(HttpSe
200200
}
201201

202202
private String inflateIfRequired(HttpServletRequest request, byte[] b) {
203-
if (HttpMethod.GET.equals(request.getMethod())) {
203+
if (HttpMethod.GET.matches(request.getMethod())) {
204204
return Saml2Utils.samlInflate(b);
205205
}
206206
return new String(b, StandardCharsets.UTF_8);

saml2/saml2-service-provider/src/test/java/org/springframework/security/saml2/provider/service/web/authentication/logout/OpenSamlLogoutRequestValidatorParametersResolverTests.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,21 @@ void saml2LogoutResolveWhenUnauthenticatedThenParameters() {
115115
assertThat(parameters.getLogoutRequest().getSamlRequest()).isEqualTo(encoded);
116116
}
117117

118+
@Test
119+
void saml2LogoutResolveWhenUnauthenticatedGetRequestThenInflates() {
120+
String registrationId = this.registration.getRegistrationId();
121+
MockHttpServletRequest request = get("/logout/saml2/slo");
122+
String logoutRequest = serialize(TestOpenSamlObjects.logoutRequest());
123+
String encoded = Saml2Utils.samlEncode(Saml2Utils.samlDeflate(logoutRequest));
124+
request.setParameter(Saml2ParameterNames.SAML_REQUEST, encoded);
125+
given(this.registrations.findUniqueByAssertingPartyEntityId(TestOpenSamlObjects.ASSERTING_PARTY_ENTITY_ID))
126+
.willReturn(this.registration);
127+
Saml2LogoutRequestValidatorParameters parameters = this.resolver.resolve(request, null);
128+
assertThat(parameters.getAuthentication()).isNull();
129+
assertThat(parameters.getRelyingPartyRegistration().getRegistrationId()).isEqualTo(registrationId);
130+
assertThat(parameters.getLogoutRequest().getSamlRequest()).isEqualTo(encoded);
131+
}
132+
118133
@Test
119134
void saml2LogoutRegistrationIdResolveWhenNoMatchingRegistrationIdThenSaml2Exception() {
120135
MockHttpServletRequest request = post("/logout/saml2/slo/id");
@@ -129,6 +144,12 @@ private MockHttpServletRequest post(String uri) {
129144
return request;
130145
}
131146

147+
private MockHttpServletRequest get(String uri) {
148+
MockHttpServletRequest request = new MockHttpServletRequest("GET", uri);
149+
request.setServletPath(uri);
150+
return request;
151+
}
152+
132153
private String serialize(XMLObject object) {
133154
try {
134155
Marshaller marshaller = XMLObjectProviderRegistrySupport.getMarshallerFactory().getMarshaller(object);

0 commit comments

Comments
 (0)