in src/main/java/org/apache/sling/auth/saml2/impl/AuthenticationHandlerSAML2Impl.java [581:607]
private boolean validateSaml2Conditions(HttpServletRequest req, Assertion assertion) {
final List<SubjectConfirmation> subjectConfirmations = assertion.getSubject().getSubjectConfirmations();
if (subjectConfirmations.isEmpty()) {
return false;
}
final SubjectConfirmationData subjectConfirmationData = subjectConfirmations.get(0).getSubjectConfirmationData();
final Instant notOnOrAfter = subjectConfirmationData.getNotOnOrAfter();
// validate expiration
final boolean validTime = notOnOrAfter.isAfter(Instant.now());
if (!validTime) {
logger.error("SAML2 Subject Confirmation failed validation: Expired.");
}
// validate recipient
final String recipient = subjectConfirmationData.getRecipient();
final boolean validRecipient = recipient.equals(this.getACSURL());
if (!validRecipient) {
logger.error("SAML2 Subject Confirmation failed validation: Invalid Recipient.");
}
// validate In Response To (ID saved in session from authnRequest)
final String inResponseTo = subjectConfirmationData.getInResponseTo();
final String savedInResponseTo = new SessionStorage(SAML2_REQUEST_ID).getString(req);
boolean validID = savedInResponseTo.equals(inResponseTo);
// return true if subject confirmation is validated
return validTime && validRecipient && validID;
}