[java-opensaml] branch main updated: Add clock skew support.
Scott Cantor
cantor.2 at osu.edu
Thu Jan 7 21:43:57 UTC 2021
This is an automated email from the git hooks/post-receive script.
scantor pushed a commit to branch main
in repository java-opensaml.
View the commit online:
http://git.shibboleth.net/view/?p=java-opensaml.git;a=commit;h=dbd431afbbad01667021c3c37c8a986a8c20b7ec
The following commit(s) were added to refs/heads/main by this push:
new dbd431afb Add clock skew support.
dbd431afb is described below
commit dbd431afbbad01667021c3c37c8a986a8c20b7ec
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Thu Jan 7 16:43:54 2021 -0500
Add clock skew support.
---
.../DefaultAssertionValidationContextBuilder.java | 121 ++++++++++++++-------
1 file changed, 82 insertions(+), 39 deletions(-)
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/DefaultAssertionValidationContextBuilder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/DefaultAssertionValidationContextBuilder.java
index 291bed3ef..713dabfc4 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/DefaultAssertionValidationContextBuilder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/DefaultAssertionValidationContextBuilder.java
@@ -73,6 +73,7 @@ import com.google.common.base.Predicates;
import net.shibboleth.utilities.java.support.collection.LazySet;
import net.shibboleth.utilities.java.support.collection.Pair;
import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.utilities.java.support.logic.FunctionSupport;
import net.shibboleth.utilities.java.support.net.HttpServletSupport;
import net.shibboleth.utilities.java.support.primitive.StringSupport;
import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
@@ -85,52 +86,55 @@ public class DefaultAssertionValidationContextBuilder
implements Function<AssertionValidationInput, ValidationContext> {
/** Logger. */
- @Nullable private Logger log = LoggerFactory.getLogger(DefaultAssertionValidationContextBuilder.class);
+ @Nonnull private Logger log = LoggerFactory.getLogger(DefaultAssertionValidationContextBuilder.class);
+
+ /** A function for resolving the clock skew to apply. */
+ @Nullable private Function<ProfileRequestContext, Duration> clockSkew;
/** A function for resolving the signature validation CriteriaSet for a particular function. */
- private Function<Pair<ProfileRequestContext, Assertion>, CriteriaSet> signatureCriteriaSetFunction;
+ @Nullable private Function<Pair<ProfileRequestContext, Assertion>, CriteriaSet> signatureCriteriaSetFunction;
/** Predicate for determining whether an Assertion signature is required. */
- private Predicate<ProfileRequestContext> signatureRequired;
+ @Nonnull private Predicate<ProfileRequestContext> signatureRequired;
/** Predicate for determining whether an Assertion's network address(es) should be checked. */
- private Predicate<ProfileRequestContext> checkAddress;
+ @Nonnull private Predicate<ProfileRequestContext> checkAddress;
/** Function for determining the max allowed time since authentication. */
- private Function<ProfileRequestContext, Duration> maximumTimeSinceAuthn;
+ @Nullable private Function<ProfileRequestContext, Duration> maximumTimeSinceAuthn;
/** Predicate for determining whether to include the self entityID as a valid Recipient. */
- private Predicate<ProfileRequestContext> includeSelfEntityIDAsRecipient;
+ @Nonnull private Predicate<ProfileRequestContext> includeSelfEntityIDAsRecipient;
/** Function for determining additional valid audience values. */
- private Function<ProfileRequestContext, Set<String>> additionalAudiences;
+ @Nullable private Function<ProfileRequestContext, Set<String>> additionalAudiences;
/** Function for determining additional valid Issuer values. */
- private Function<ProfileRequestContext, Set<String>> validIssuers;
+ @Nonnull private Function<ProfileRequestContext, Set<String>> validIssuers;
/** Function for determining the valid InResponseTo value. */
- private Function<ProfileRequestContext, String> inResponseTo;
+ @Nullable private Function<ProfileRequestContext, String> inResponseTo;
/** Predicate for determining whether an Assertion SubjectConfirmationData InResponseTo is required. */
- private Predicate<ProfileRequestContext> inResponseToRequired;
+ @Nonnull private Predicate<ProfileRequestContext> inResponseToRequired;
/** Predicate for determining whether an Assertion SubjectConfirmationData Recipient is required. */
- private Predicate<ProfileRequestContext> recipientRequired;
+ @Nonnull private Predicate<ProfileRequestContext> recipientRequired;
/** Predicate for determining whether an Assertion SubjectConfirmationData NotBefore is required. */
- private Predicate<ProfileRequestContext> notBeforeRequired;
+ @Nonnull private Predicate<ProfileRequestContext> notBeforeRequired;
/** Predicate for determining whether an Assertion SubjectConfirmationData NotOnOrAfter is required. */
- private Predicate<ProfileRequestContext> notOnOrAfterRequired;
+ @Nonnull private Predicate<ProfileRequestContext> notOnOrAfterRequired;
/** Predicate for determining whether an Assertion SubjectConfirmationData Address is required. */
- private Predicate<ProfileRequestContext> addressRequired;
+ @Nonnull private Predicate<ProfileRequestContext> addressRequired;
/** The set of required Conditions. */
- private Set<QName> requiredConditions;
+ @Nonnull private Set<QName> requiredConditions;
/** Resolver for security parameters context. */
- private Function<ProfileRequestContext, SecurityParametersContext> securityParametersLookupStrategy;
+ @Nonnull private Function<ProfileRequestContext, SecurityParametersContext> securityParametersLookupStrategy;
/**
* Constructor.
@@ -151,6 +155,39 @@ public class DefaultAssertionValidationContextBuilder
securityParametersLookupStrategy = new ChildContextLookup<>(SecurityParametersContext.class)
.compose(new InboundMessageContextLookup());
}
+
+ /**
+ * Get the strategy by which to resolve the clock skew.
+ *
+ * @return lookup strategy
+ *
+ * @since 4.1.0
+ */
+ @Nullable public Function<ProfileRequestContext, Duration> getClockSkew() {
+ return clockSkew;
+ }
+
+ /**
+ * Set the clock skew.
+ *
+ * @param skew clock skew
+ *
+ * @since 4.1.0
+ */
+ public void setClockSkew(@Nullable final Duration skew) {
+ clockSkew = FunctionSupport.constant(skew);
+ }
+
+ /**
+ * Set the strategy by which to resolve the clock skew.
+ *
+ * @param strategy lookup strategy
+ *
+ * @since 4.1.0
+ */
+ public void setClockSkewLookupStrategy(@Nullable final Function<ProfileRequestContext, Duration> strategy) {
+ clockSkew = strategy;
+ }
/**
* Get the strategy by which to resolve a {@link SecurityParametersContext}.
@@ -203,7 +240,7 @@ public class DefaultAssertionValidationContextBuilder
*
* @return the predicate
*/
- public Predicate<ProfileRequestContext> getIncludeSelfEntityIDAsRecipient() {
+ @Nonnull public Predicate<ProfileRequestContext> getIncludeSelfEntityIDAsRecipient() {
return includeSelfEntityIDAsRecipient;
}
@@ -216,7 +253,7 @@ public class DefaultAssertionValidationContextBuilder
*
* @param predicate the predicate, must be non-null
*/
- public void setIncludeSelfEntityIDAsRecipient(final @Nonnull Predicate<ProfileRequestContext> predicate) {
+ public void setIncludeSelfEntityIDAsRecipient(@Nonnull final Predicate<ProfileRequestContext> predicate) {
includeSelfEntityIDAsRecipient = Constraint.isNotNull(predicate, "Signature required predicate was null");
}
@@ -229,7 +266,7 @@ public class DefaultAssertionValidationContextBuilder
*
* @return the predicate
*/
- public Predicate<ProfileRequestContext> getSignatureRequired() {
+ @Nonnull public Predicate<ProfileRequestContext> getSignatureRequired() {
return signatureRequired;
}
@@ -242,7 +279,7 @@ public class DefaultAssertionValidationContextBuilder
*
* @param predicate the predicate, must be non-null
*/
- public void setSignatureRequired(final @Nonnull Predicate<ProfileRequestContext> predicate) {
+ public void setSignatureRequired(@Nonnull final Predicate<ProfileRequestContext> predicate) {
signatureRequired = Constraint.isNotNull(predicate, "Signature required predicate was null");
}
@@ -255,7 +292,7 @@ public class DefaultAssertionValidationContextBuilder
*
* @param function the function, may be null
*/
- public void setInResponseTo(final @Nonnull Function<ProfileRequestContext,String> function) {
+ public void setInResponseTo(final @Nullable Function<ProfileRequestContext,String> function) {
inResponseTo = function;
}
@@ -268,7 +305,7 @@ public class DefaultAssertionValidationContextBuilder
*
* @return the function
*/
- public Function<ProfileRequestContext,String> getInResponseTo() {
+ @Nullable public Function<ProfileRequestContext,String> getInResponseTo() {
return inResponseTo;
}
@@ -281,7 +318,7 @@ public class DefaultAssertionValidationContextBuilder
*
* @return the predicate
*/
- public Predicate<ProfileRequestContext> getInResponseToRequired() {
+ @Nonnull public Predicate<ProfileRequestContext> getInResponseToRequired() {
return inResponseToRequired;
}
@@ -294,7 +331,7 @@ public class DefaultAssertionValidationContextBuilder
*
* @param predicate the predicate, must be non-null
*/
- public void setInResponseToRequired(final @Nonnull Predicate<ProfileRequestContext> predicate) {
+ public void setInResponseToRequired(@Nonnull final Predicate<ProfileRequestContext> predicate) {
inResponseToRequired = Constraint.isNotNull(predicate, "InResponseTo required predicate was null");
}
@@ -307,7 +344,7 @@ public class DefaultAssertionValidationContextBuilder
*
* @return the predicate
*/
- public Predicate<ProfileRequestContext> getRecipientRequired() {
+ @Nonnull public Predicate<ProfileRequestContext> getRecipientRequired() {
return recipientRequired;
}
@@ -320,7 +357,7 @@ public class DefaultAssertionValidationContextBuilder
*
* @param predicate the predicate, must be non-null
*/
- public void setRecipientRequired(final @Nonnull Predicate<ProfileRequestContext> predicate) {
+ public void setRecipientRequired(@Nonnull final Predicate<ProfileRequestContext> predicate) {
recipientRequired = Constraint.isNotNull(predicate, "Recipient required predicate was null");
}
@@ -333,7 +370,7 @@ public class DefaultAssertionValidationContextBuilder
*
* @return the predicate
*/
- public Predicate<ProfileRequestContext> getNotBeforeRequired() {
+ @Nonnull public Predicate<ProfileRequestContext> getNotBeforeRequired() {
return notBeforeRequired;
}
@@ -346,7 +383,7 @@ public class DefaultAssertionValidationContextBuilder
*
* @param predicate the predicate, must be non-null
*/
- public void setNotBeforeRequired(final @Nonnull Predicate<ProfileRequestContext> predicate) {
+ public void setNotBeforeRequired(@Nonnull final Predicate<ProfileRequestContext> predicate) {
notBeforeRequired = Constraint.isNotNull(predicate, "NotBefore required predicate was null");
}
@@ -359,7 +396,7 @@ public class DefaultAssertionValidationContextBuilder
*
* @return the predicate
*/
- public Predicate<ProfileRequestContext> getNotOnOrAfterRequired() {
+ @Nonnull public Predicate<ProfileRequestContext> getNotOnOrAfterRequired() {
return notOnOrAfterRequired;
}
@@ -372,7 +409,7 @@ public class DefaultAssertionValidationContextBuilder
*
* @param predicate the predicate, must be non-null
*/
- public void setNotOnOrAfterRequired(final @Nonnull Predicate<ProfileRequestContext> predicate) {
+ public void setNotOnOrAfterRequired(@Nonnull final Predicate<ProfileRequestContext> predicate) {
notOnOrAfterRequired = Constraint.isNotNull(predicate, "NotOnOrAfter required predicate was null");
}
@@ -385,7 +422,7 @@ public class DefaultAssertionValidationContextBuilder
*
* @return the predicate
*/
- public Predicate<ProfileRequestContext> getAddressRequired() {
+ @Nonnull public Predicate<ProfileRequestContext> getAddressRequired() {
return addressRequired;
}
@@ -411,7 +448,7 @@ public class DefaultAssertionValidationContextBuilder
*
* @return the predicate
*/
- public Predicate<ProfileRequestContext> getCheckAddress() {
+ @Nonnull public Predicate<ProfileRequestContext> getCheckAddress() {
return checkAddress;
}
@@ -424,7 +461,7 @@ public class DefaultAssertionValidationContextBuilder
*
* @param predicate the predicate, must be non-null
*/
- public void setCheckAddress(final @Nonnull Predicate<ProfileRequestContext> predicate) {
+ public void setCheckAddress(@Nonnull final Predicate<ProfileRequestContext> predicate) {
checkAddress = Constraint.isNotNull(predicate, "Check address predicate was null");
}
@@ -437,7 +474,7 @@ public class DefaultAssertionValidationContextBuilder
*
* @return the function
*/
- public Function<ProfileRequestContext,Set<String>> getAdditionalAudiences() {
+ @Nullable public Function<ProfileRequestContext,Set<String>> getAdditionalAudiences() {
return additionalAudiences;
}
@@ -450,7 +487,7 @@ public class DefaultAssertionValidationContextBuilder
*
* @param function the function, may be null
*/
- public void setAdditionalAudiences(final @Nonnull Function<ProfileRequestContext,Set<String>> function) {
+ public void setAdditionalAudiences(@Nullable final Function<ProfileRequestContext,Set<String>> function) {
additionalAudiences = function;
}
@@ -463,7 +500,7 @@ public class DefaultAssertionValidationContextBuilder
*
* @return the function
*/
- public Function<ProfileRequestContext,Set<String>> getValidIssuers() {
+ @Nonnull public Function<ProfileRequestContext,Set<String>> getValidIssuers() {
return validIssuers;
}
@@ -476,7 +513,7 @@ public class DefaultAssertionValidationContextBuilder
*
* @param function the function, may be null
*/
- public void setValidIssuers(final @Nonnull Function<ProfileRequestContext,Set<String>> function) {
+ public void setValidIssuers(@Nonnull final Function<ProfileRequestContext,Set<String>> function) {
validIssuers = Constraint.isNotNull(function, "Valied Issuers function was null");
}
@@ -489,7 +526,7 @@ public class DefaultAssertionValidationContextBuilder
*
* @return the function
*/
- public Function<ProfileRequestContext,Duration> getMaximumTimeSinceAuthn() {
+ @Nullable public Function<ProfileRequestContext,Duration> getMaximumTimeSinceAuthn() {
return maximumTimeSinceAuthn;
}
@@ -502,7 +539,7 @@ public class DefaultAssertionValidationContextBuilder
*
* @param function the function, may be null
*/
- public void setMaximumTimeSinceAuthn(final @Nonnull Function<ProfileRequestContext,Duration> function) {
+ public void setMaximumTimeSinceAuthn(@Nullable final Function<ProfileRequestContext,Duration> function) {
maximumTimeSinceAuthn = function;
}
@@ -554,6 +591,12 @@ public class DefaultAssertionValidationContextBuilder
final TreeMap<String, Object> staticParams = new TreeMap<>();
+ // Clock skew
+ if (getClockSkew() != null) {
+ staticParams.put(SAML2AssertionValidationParameters.CLOCK_SKEW,
+ getClockSkew().apply(input.getProfileRequestContext()));
+ }
+
// Issuer
staticParams.put(SAML2AssertionValidationParameters.VALID_ISSUERS,
getValidIssuers().apply(input.getProfileRequestContext()));
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list