Skip to content

Commit 9a1fae3

Browse files
committed
Add createDefaultAssertionValidatorWithParameters
Closes gh-11675
1 parent 095faff commit 9a1fae3

File tree

2 files changed

+38
-4
lines changed

2 files changed

+38
-4
lines changed

saml2/saml2-service-provider/src/opensaml4Main/java/org/springframework/security/saml2/provider/service/authentication/OpenSaml4AuthenticationProvider.java

+19-4
Original file line numberDiff line numberDiff line change
@@ -432,10 +432,8 @@ private static Saml2ResponseValidatorResult validateInResponseTo(AbstractSaml2Au
432432
*/
433433
public static Converter<AssertionToken, Saml2ResponseValidatorResult> createDefaultAssertionValidator() {
434434

435-
return createAssertionValidator(Saml2ErrorCodes.INVALID_ASSERTION,
436-
(assertionToken) -> SAML20AssertionValidators.attributeValidator,
437-
(assertionToken) -> createValidationContext(assertionToken,
438-
(params) -> params.put(SAML2AssertionValidationParameters.CLOCK_SKEW, Duration.ofMinutes(5))));
435+
return createDefaultAssertionValidatorWithParameters(
436+
(params) -> params.put(SAML2AssertionValidationParameters.CLOCK_SKEW, Duration.ofMinutes(5)));
439437
}
440438

441439
/**
@@ -444,14 +442,31 @@ public static Converter<AssertionToken, Saml2ResponseValidatorResult> createDefa
444442
* @param contextConverter the conversion strategy to use to generate a
445443
* {@link ValidationContext} for each assertion being validated
446444
* @return the default assertion validator strategy
445+
* @deprecated Use {@link #createDefaultAssertionValidatorWithParameters} instead
447446
*/
447+
@Deprecated
448448
public static Converter<AssertionToken, Saml2ResponseValidatorResult> createDefaultAssertionValidator(
449449
Converter<AssertionToken, ValidationContext> contextConverter) {
450450

451451
return createAssertionValidator(Saml2ErrorCodes.INVALID_ASSERTION,
452452
(assertionToken) -> SAML20AssertionValidators.attributeValidator, contextConverter);
453453
}
454454

455+
/**
456+
* Construct a default strategy for validating each SAML 2.0 Assertion and associated
457+
* {@link Authentication} token
458+
* @param validationContextParameters a consumer for editing the values passed to the
459+
* {@link ValidationContext} for each assertion being validated
460+
* @return the default assertion validator strategy
461+
* @since 5.8
462+
*/
463+
public static Converter<AssertionToken, Saml2ResponseValidatorResult> createDefaultAssertionValidatorWithParameters(
464+
Consumer<Map<String, Object>> validationContextParameters) {
465+
return createAssertionValidator(Saml2ErrorCodes.INVALID_ASSERTION,
466+
(assertionToken) -> SAML20AssertionValidators.attributeValidator,
467+
(assertionToken) -> createValidationContext(assertionToken, validationContextParameters));
468+
}
469+
455470
/**
456471
* Construct a default strategy for converting a SAML 2.0 Response and
457472
* {@link Authentication} token into a {@link Saml2Authentication}

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

+19
Original file line numberDiff line numberDiff line change
@@ -520,6 +520,25 @@ public void authenticateWhenDelegatingToDefaultAssertionValidatorThenUses() {
520520
// @formatter:on
521521
}
522522

523+
// gh-11675
524+
@Test
525+
public void authenticateWhenUsingCustomAssertionValidatorThenUses() {
526+
OpenSaml4AuthenticationProvider provider = new OpenSaml4AuthenticationProvider();
527+
Consumer<Map<String, Object>> validationParameters = mock(Consumer.class);
528+
// @formatter:off
529+
provider.setAssertionValidator(OpenSaml4AuthenticationProvider
530+
.createDefaultAssertionValidatorWithParameters(validationParameters));
531+
// @formatter:on
532+
Response response = response();
533+
Assertion assertion = assertion();
534+
OneTimeUse oneTimeUse = build(OneTimeUse.DEFAULT_ELEMENT_NAME);
535+
assertion.getConditions().getConditions().add(oneTimeUse);
536+
response.getAssertions().add(assertion);
537+
Saml2AuthenticationToken token = token(signed(response), verifying(registration()));
538+
provider.authenticate(token);
539+
verify(validationParameters).accept(any());
540+
}
541+
523542
@Test
524543
public void authenticateWhenCustomAssertionValidatorThenUses() {
525544
Converter<OpenSaml4AuthenticationProvider.AssertionToken, Saml2ResponseValidatorResult> validator = mock(

0 commit comments

Comments
 (0)