Skip to content

Commit 9df3a57

Browse files
committed
Merge branch '6.4.x'
2 parents eda9142 + 868342b commit 9df3a57

File tree

3 files changed

+27
-2
lines changed

3 files changed

+27
-2
lines changed

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

+9-2
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ static Converter<ResponseToken, Saml2ResponseValidatorResult> createDefaultRespo
166166
String inResponseTo = response.getInResponseTo();
167167
result = result.concat(validateInResponseTo(token.getAuthenticationRequest(), inResponseTo));
168168

169-
String issuer = response.getIssuer().getValue();
169+
String issuer = issuer(response);
170170
String destination = response.getDestination();
171171
String location = token.getRelyingPartyRegistration().getAssertionConsumerServiceLocation();
172172
if (StringUtils.hasText(destination) && !destination.equals(location)) {
@@ -189,6 +189,13 @@ static Converter<ResponseToken, Saml2ResponseValidatorResult> createDefaultRespo
189189
};
190190
}
191191

192+
private static String issuer(Response response) {
193+
if (response.getIssuer() == null) {
194+
return null;
195+
}
196+
return response.getIssuer().getValue();
197+
}
198+
192199
static List<String> getStatusCodes(Response response) {
193200
if (response.getStatus() == null) {
194201
return List.of(StatusCode.SUCCESS);
@@ -314,7 +321,7 @@ private Response parseResponse(String response) throws Saml2Exception, Saml2Auth
314321
}
315322

316323
private void process(Saml2AuthenticationToken token, Response response) {
317-
String issuer = response.getIssuer().getValue();
324+
String issuer = issuer(response);
318325
this.logger.debug(LogMessage.format("Processing SAML response from %s", issuer));
319326
boolean responseSigned = response.isSigned();
320327

saml2/saml2-service-provider/src/opensaml4Test/java/org/springframework/security/saml2/provider/service/authentication/OpenSaml4AuthenticationProviderTests.java

+9
Original file line numberDiff line numberDiff line change
@@ -889,6 +889,15 @@ public void authenticateWhenClockSkewThenVerifiesSignature() {
889889
provider.authenticate(token);
890890
}
891891

892+
// gh-16989
893+
@Test
894+
public void authenticateWhenNullIssuerThenNoNullPointer() {
895+
OpenSaml4AuthenticationProvider provider = new OpenSaml4AuthenticationProvider();
896+
Response response = TestOpenSamlObjects.signedResponseWithOneAssertion((r) -> r.setIssuer(null));
897+
Saml2AuthenticationToken token = token(response, verifying(registration()));
898+
assertThatExceptionOfType(Saml2AuthenticationException.class).isThrownBy(() -> provider.authenticate(token));
899+
}
900+
892901
private <T extends XMLObject> T build(QName qName) {
893902
return (T) XMLObjectProviderRegistrySupport.getBuilderFactory().getBuilder(qName).buildObject(qName);
894903
}

saml2/saml2-service-provider/src/opensaml5Test/java/org/springframework/security/saml2/provider/service/authentication/OpenSaml5AuthenticationProviderTests.java

+9
Original file line numberDiff line numberDiff line change
@@ -975,6 +975,15 @@ public void authenticateWhenClockSkewThenVerifiesSignature() {
975975
provider.authenticate(token);
976976
}
977977

978+
// gh-16989
979+
@Test
980+
public void authenticateWhenNullIssuerThenNoNullPointer() {
981+
OpenSaml5AuthenticationProvider provider = new OpenSaml5AuthenticationProvider();
982+
Response response = TestOpenSamlObjects.signedResponseWithOneAssertion((r) -> r.setIssuer(null));
983+
Saml2AuthenticationToken token = token(response, verifying(registration()));
984+
assertThatExceptionOfType(Saml2AuthenticationException.class).isThrownBy(() -> provider.authenticate(token));
985+
}
986+
978987
private <T extends XMLObject> T build(QName qName) {
979988
return (T) XMLObjectProviderRegistrySupport.getBuilderFactory().getBuilder(qName).buildObject(qName);
980989
}

0 commit comments

Comments
 (0)