[java-oidc-common] 24/28: JCOMOIDC-41 - Move OIDC Signature Validation resolvers and parameter classes to commons
Phil Smart
philip.smart at jisc.ac.uk
Wed Oct 5 10:34:55 UTC 2022
This is an automated email from the git hooks/post-receive script.
philsmart pushed a commit to branch dev/JCOMOIDC-41
in repository java-oidc-common.
View the commit online:
http://git.shibboleth.net/view/?p=java-oidc-common.git;a=commit;h=6023191baa7fea28ab43693c9ecce2485e727f45
commit 6023191baa7fea28ab43693c9ecce2485e727f45
Author: Phil Smart <philip.smart at jisc.ac.uk>
AuthorDate: Wed Sep 21 11:57:17 2022 +0100
JCOMOIDC-41 - Move OIDC Signature Validation resolvers and parameter classes to commons
- Rename JWT signature validation config and remove generics
- Code improvements
https://shibboleth.atlassian.net/browse/JCOMOIDC-41
---
.../oidc/security/JWTDecryptionConfiguration.java | 3 ++
.../oidc/security/JWTDecryptionParameters.java | 3 +-
.../oidc/security/JWTEncryptionConfiguration.java | 2 +-
.../oidc/security/JWTEncryptionParameters.java | 17 +++++++++
.../security/JWTSignatureSigningConfiguration.java | 3 ++
.../security/JWTSignatureSigningParameters.java | 2 +-
.../JWTSignatureSigningParametersResolver.java | 3 ++
...va => JWTSignatureValidationConfiguration.java} | 10 +++---
....java => JWTSignatureValidationParameters.java} | 14 ++++----
... JWTSignatureValidationParametersResolver.java} | 6 ++--
.../context/JWTSecurityParametersContext.java | 10 +++---
.../credential/BasicExpiringJWKCredential.java | 17 +++++++++
.../security/credential/ExpiringJWKCredential.java | 17 +++++++++
.../JWTSignatureSigningConfigurationCriterion.java | 22 +++++++++++-
...TSignatureValidationConfigurationCriterion.java | 12 +++----
.../criterion/ProviderMetadataCriterion.java | 3 ++
.../criterion/StaticCredentialCriterion.java | 19 +++++++++-
.../impl/BasicJOSEObjectCredentialResolver.java | 9 +++--
.../impl/CriterionCredentialResolver.java | 1 +
.../impl/LocalJOSEObjectCredentialResolver.java | 2 +-
.../impl/ProviderMetadataCredentialResolver.java | 22 ++++++++----
.../impl/BaseJWTSignatureSecurityHandler.java | 5 +++
.../security/impl/BaseSignedJWTTrustEngine.java | 19 +++++++++-
...piringJWTSharedSecretCredentialFactoryBean.java | 5 +--
.../impl/BasicJWTEncryptionConfiguration.java | 2 +-
.../BasicJWTSignatureSigningConfiguration.java | 3 ++
...BasicJWTSignatureSigningParametersResolver.java | 9 ++---
... BasicJWTSignatureValidationConfiguration.java} | 25 +++++++-------
...cJWTSignatureValidationParametersResolver.java} | 39 +++++++++++++--------
.../DefaultJWTDecryptionParametersResolver.java | 11 ++++++
.../DefaultJWTEncryptionParametersResolver.java | 5 ++-
.../impl/ExplicitKeySignedJWTTrustEngine.java | 12 +++++++
.../oidc/security/impl/JWTDecrypter.java | 9 ++---
.../impl/JWTMessageSignatureSecurityHandler.java | 11 ++++++
.../PopulateJWTSignatureSigningParameters.java | 12 +++++--
...pulateJWTSignatureSigningParametersHandler.java | 40 ++++++++++++++++++++++
.../PopulateJWTSignatureValidationParameters.java | 22 ++++++------
...ateJWTSignatureValidationParametersHandler.java | 24 ++++++-------
...ransportEncryptionAlgorithmsLookupStrategy.java | 2 +-
.../impl/OIDCProviderMetadataResolverTest.java | 18 +---------
.../config/OIDCAuthorizationConfiguration.java | 23 +++++++++++++
.../profile/config/OIDCSecurityConfiguration.java | 40 ++++++++++------------
.../impl/AbstractClaimsSetAuditExtractor.java | 2 +-
.../audit/impl/ClaimSetFromJWTLookupStrategy.java | 19 ++++++----
.../impl/DateBasedJWTClaimAuditExtractor.java | 2 +-
.../impl/StringBasedJWTClaimAuditExtractor.java | 4 ++-
.../StringListBasedJWTClaimAuditExtractor.java | 4 ++-
.../encoder/impl/HTTPPostAuthnRequestEncoder.java | 1 -
48 files changed, 400 insertions(+), 165 deletions(-)
diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/JWTDecryptionConfiguration.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/JWTDecryptionConfiguration.java
index f55a1f9..fbac81f 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/JWTDecryptionConfiguration.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/JWTDecryptionConfiguration.java
@@ -23,6 +23,9 @@ import org.opensaml.xmlsec.AlgorithmPolicyConfiguration;
import net.shibboleth.oidc.security.credential.JOSEObjectCredentialResolver;
+/**
+ * The configuration information to use when decrypting encrypted JWTs.
+ */
public interface JWTDecryptionConfiguration extends AlgorithmPolicyConfiguration {
/**
diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/JWTDecryptionParameters.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/JWTDecryptionParameters.java
index 6b8d2e6..d55ddb3 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/JWTDecryptionParameters.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/JWTDecryptionParameters.java
@@ -40,6 +40,7 @@ public class JWTDecryptionParameters extends AlgorithmPolicyParameters {
/** Carries additional criterion made available to the resolvers at runtime.*/
@Nonnull final CriteriaSet additionalCriteria;
+ /** Constructor .*/
public JWTDecryptionParameters() {
additionalCriteria = new CriteriaSet();
}
@@ -49,7 +50,7 @@ public class JWTDecryptionParameters extends AlgorithmPolicyParameters {
*
* @return the criteria set.
*/
- public CriteriaSet getAdditionalCriteria() {
+ @Nonnull public CriteriaSet getAdditionalCriteria() {
return additionalCriteria;
}
diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/JWTEncryptionConfiguration.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/JWTEncryptionConfiguration.java
index c1528f4..95a6e73 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/JWTEncryptionConfiguration.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/JWTEncryptionConfiguration.java
@@ -49,7 +49,7 @@ public interface JWTEncryptionConfiguration extends AlgorithmPolicyConfiguration
@Nonnull @NonnullElements @Unmodifiable @NotLive public List<String> getKeyTransportEncryptionAlgorithms();
/**
- * Get the CredentialResolver resolve the content encryption key.
+ * Get the CredentialResolver to resolve the content encryption key.
*
* @return the KeyInfoCredentialResolver instance
*/
diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/JWTEncryptionParameters.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/JWTEncryptionParameters.java
index 04601dc..2683b04 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/JWTEncryptionParameters.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/JWTEncryptionParameters.java
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
package net.shibboleth.oidc.security;
import javax.annotation.Nullable;
diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/JWTSignatureSigningConfiguration.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/JWTSignatureSigningConfiguration.java
index 91f1d2a..300c9df 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/JWTSignatureSigningConfiguration.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/JWTSignatureSigningConfiguration.java
@@ -11,6 +11,9 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElemen
import net.shibboleth.utilities.java.support.annotation.constraint.NotLive;
import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
+/**
+ * The configuration information to use when generating a signed JWT.
+ */
public interface JWTSignatureSigningConfiguration extends AlgorithmPolicyConfiguration {
/**
diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/JWTSignatureSigningParameters.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/JWTSignatureSigningParameters.java
index 5fbd842..e0f4148 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/JWTSignatureSigningParameters.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/JWTSignatureSigningParameters.java
@@ -22,7 +22,7 @@ import javax.annotation.Nullable;
import org.opensaml.security.credential.Credential;
/**
- * The effective parameters to use when generating an JWT signature.
+ * The effective parameters to use when generating a signed JWT.
*/
public class JWTSignatureSigningParameters {
diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/JWTSignatureSigningParametersResolver.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/JWTSignatureSigningParametersResolver.java
index ac79925..da5c761 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/JWTSignatureSigningParametersResolver.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/JWTSignatureSigningParametersResolver.java
@@ -20,6 +20,9 @@ package net.shibboleth.oidc.security;
import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
import net.shibboleth.utilities.java.support.resolver.Resolver;
+/**
+ * An interface for components which resolve {@link JWTSignatureSigningParameters} based on a {@link CriteriaSet}.
+ */
public interface JWTSignatureSigningParametersResolver extends Resolver<JWTSignatureSigningParameters, CriteriaSet> {
}
diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/SignatureValidationConfiguration.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/JWTSignatureValidationConfiguration.java
similarity index 83%
rename from oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/SignatureValidationConfiguration.java
rename to oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/JWTSignatureValidationConfiguration.java
index d708034..2cf3c1d 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/SignatureValidationConfiguration.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/JWTSignatureValidationConfiguration.java
@@ -22,18 +22,18 @@ import javax.annotation.Nullable;
import org.opensaml.security.trust.TrustEngine;
import org.opensaml.xmlsec.AlgorithmPolicyConfiguration;
+import com.nimbusds.jwt.SignedJWT;
+
/**
- * The configuration information to use when validating a signature.
- *
- * @param <T> the token type to validate
+ * The configuration information to use when validating a signed JWT.
*/
-public interface SignatureValidationConfiguration<T> extends AlgorithmPolicyConfiguration {
+public interface JWTSignatureValidationConfiguration extends AlgorithmPolicyConfiguration {
/**
* Get the signature trust engine to use.
*
* @return the signature trust engine
*/
- @Nullable public TrustEngine<T> getSignatureTrustEngine();
+ @Nullable public TrustEngine<SignedJWT> getSignatureTrustEngine();
}
diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/SignatureValidationParameters.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/JWTSignatureValidationParameters.java
similarity index 81%
rename from oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/SignatureValidationParameters.java
rename to oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/JWTSignatureValidationParameters.java
index b814247..ab06577 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/SignatureValidationParameters.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/JWTSignatureValidationParameters.java
@@ -22,22 +22,22 @@ import javax.annotation.Nullable;
import org.opensaml.security.trust.TrustEngine;
import org.opensaml.xmlsec.AlgorithmPolicyParameters;
+import com.nimbusds.jwt.SignedJWT;
+
/**
- * The effective parameters to use when validating a signature of the given type.
- *
- * @param <T> the token type this validation parameter
+ * The effective parameters to use when validating a signed JWT.
*/
-public class SignatureValidationParameters<T> extends AlgorithmPolicyParameters {
+public class JWTSignatureValidationParameters extends AlgorithmPolicyParameters {
/** The signature trust engine to use. */
- @Nullable private TrustEngine<T> signatureTrustEngine;
+ @Nullable private TrustEngine<SignedJWT> signatureTrustEngine;
/**
* Get the signature trust engine to use.
*
* @return the signature trust engine
*/
- @Nullable public TrustEngine<T> getSignatureTrustEngine() {
+ @Nullable public TrustEngine<SignedJWT> getSignatureTrustEngine() {
return signatureTrustEngine;
}
@@ -46,7 +46,7 @@ public class SignatureValidationParameters<T> extends AlgorithmPolicyParameters
*
* @param engine the signature trust engine
*/
- public void setSignatureTrustEngine(@Nullable final TrustEngine<T> engine) {
+ public void setSignatureTrustEngine(@Nullable final TrustEngine<SignedJWT> engine) {
signatureTrustEngine = engine;
}
diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/SignatureValidationParametersResolver.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/JWTSignatureValidationParametersResolver.java
similarity index 78%
rename from oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/SignatureValidationParametersResolver.java
rename to oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/JWTSignatureValidationParametersResolver.java
index 3c1a628..f22592c 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/SignatureValidationParametersResolver.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/JWTSignatureValidationParametersResolver.java
@@ -21,10 +21,8 @@ import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
import net.shibboleth.utilities.java.support.resolver.Resolver;
/**
- * An interface for components which resolve {@link SignatureValidationParameters} based on a {@link CriteriaSet}.
- *
- * @param <T> the token type.
+ * An interface for components which resolve {@link JWTSignatureValidationParameters} based on a {@link CriteriaSet}.
*/
-public interface SignatureValidationParametersResolver<T> extends Resolver<SignatureValidationParameters<T>, CriteriaSet> {
+public interface JWTSignatureValidationParametersResolver extends Resolver<JWTSignatureValidationParameters, CriteriaSet> {
}
diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/context/JWTSecurityParametersContext.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/context/JWTSecurityParametersContext.java
index ac35481..15e4ad8 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/context/JWTSecurityParametersContext.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/context/JWTSecurityParametersContext.java
@@ -22,12 +22,10 @@ import javax.annotation.Nullable;
import org.opensaml.messaging.context.BaseContext;
-import com.nimbusds.jwt.SignedJWT;
-
import net.shibboleth.oidc.security.JWTDecryptionParameters;
import net.shibboleth.oidc.security.JWTEncryptionParameters;
import net.shibboleth.oidc.security.JWTSignatureSigningParameters;
-import net.shibboleth.oidc.security.SignatureValidationParameters;
+import net.shibboleth.oidc.security.JWTSignatureValidationParameters;
/**
* A context implementation for storing parameter instances for JWT signature signing and validation, and JWT
@@ -36,7 +34,7 @@ import net.shibboleth.oidc.security.SignatureValidationParameters;
public final class JWTSecurityParametersContext extends BaseContext {
/** Signature validation parameters. */
- @Nullable private SignatureValidationParameters<SignedJWT> signatureValidationParameters;
+ @Nullable private JWTSignatureValidationParameters signatureValidationParameters;
/** Signature signing parameters.*/
@Nullable private JWTSignatureSigningParameters signatureSigningParameters;
@@ -52,7 +50,7 @@ public final class JWTSecurityParametersContext extends BaseContext {
*
* @return the parameters
*/
- @Nullable public SignatureValidationParameters<SignedJWT> getSignatureValidationParameters() {
+ @Nullable public JWTSignatureValidationParameters getSignatureValidationParameters() {
return signatureValidationParameters;
}
@@ -64,7 +62,7 @@ public final class JWTSecurityParametersContext extends BaseContext {
* @return this context
*/
@Nonnull public JWTSecurityParametersContext setSignatureValidationParameters(
- @Nullable final SignatureValidationParameters<SignedJWT> params) {
+ @Nullable final JWTSignatureValidationParameters params) {
signatureValidationParameters = params;
return this;
}
diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/BasicExpiringJWKCredential.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/BasicExpiringJWKCredential.java
index 5cf2c67..f48ff54 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/BasicExpiringJWKCredential.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/BasicExpiringJWKCredential.java
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
package net.shibboleth.oidc.security.credential;
import java.time.Duration;
diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/ExpiringJWKCredential.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/ExpiringJWKCredential.java
index 46d6940..0fb75ea 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/ExpiringJWKCredential.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/ExpiringJWKCredential.java
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
package net.shibboleth.oidc.security.credential;
import java.time.Duration;
diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/criterion/JWTSignatureSigningConfigurationCriterion.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/criterion/JWTSignatureSigningConfigurationCriterion.java
index a2d0c49..8987acc 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/criterion/JWTSignatureSigningConfigurationCriterion.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/criterion/JWTSignatureSigningConfigurationCriterion.java
@@ -1,10 +1,27 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
package net.shibboleth.oidc.security.criterion;
import java.util.List;
import javax.annotation.Nonnull;
-import org.opensaml.xmlsec.criterion.SignatureSigningConfigurationCriterion;
+import org.opensaml.xmlsec.SignatureSigningConfiguration;
import net.shibboleth.oidc.security.JWTSignatureSigningConfiguration;
import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
@@ -14,6 +31,9 @@ import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
import net.shibboleth.utilities.java.support.logic.Constraint;
import net.shibboleth.utilities.java.support.resolver.Criterion;
+/**
+ * Criterion which holds one or more instances of {@link JWTSignatureSigningConfigurationCriterion}.
+ */
public class JWTSignatureSigningConfigurationCriterion implements Criterion {
/** The list of configuration instances. */
diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/criterion/JWTSignatureValidationConfigurationCriterion.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/criterion/JWTSignatureValidationConfigurationCriterion.java
index 8e8c34a..2d5c9f6 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/criterion/JWTSignatureValidationConfigurationCriterion.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/criterion/JWTSignatureValidationConfigurationCriterion.java
@@ -23,7 +23,7 @@ import javax.annotation.Nonnull;
import com.nimbusds.jwt.SignedJWT;
-import net.shibboleth.oidc.security.SignatureValidationConfiguration;
+import net.shibboleth.oidc.security.JWTSignatureValidationConfiguration;
import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
import net.shibboleth.utilities.java.support.annotation.constraint.NotLive;
@@ -32,13 +32,13 @@ import net.shibboleth.utilities.java.support.logic.Constraint;
import net.shibboleth.utilities.java.support.resolver.Criterion;
/**
- * Criterion which holds one or more instances of {@link SignatureValidationConfiguration}
+ * Criterion which holds one or more instances of {@link JWTSignatureValidationConfiguration}
* for {@link SignedJWT signed JWTs}.
*/
public class JWTSignatureValidationConfigurationCriterion implements Criterion {
/** The list of configuration instances. */
- @Nonnull @NonnullElements private final List<SignatureValidationConfiguration<SignedJWT>> configs;
+ @Nonnull @NonnullElements private final List<JWTSignatureValidationConfiguration> configs;
/**
* Constructor.
@@ -46,7 +46,7 @@ public class JWTSignatureValidationConfigurationCriterion implements Criterion {
* @param configurations list of configuration instances
*/
public JWTSignatureValidationConfigurationCriterion(@Nonnull @NonnullElements @NotEmpty final
- List<SignatureValidationConfiguration<SignedJWT>> configurations) {
+ List<JWTSignatureValidationConfiguration> configurations) {
configs = List.copyOf(Constraint.isNotNull(configurations, "List of configurations cannot be null"));
Constraint.isNotEmpty(configs, "At least one configuration is required");
@@ -58,7 +58,7 @@ public class JWTSignatureValidationConfigurationCriterion implements Criterion {
* @param configurations varargs array of configuration instances
*/
public JWTSignatureValidationConfigurationCriterion(@Nonnull @NonnullElements @NotEmpty final
- SignatureValidationConfiguration<SignedJWT>... configurations) {
+ JWTSignatureValidationConfiguration... configurations) {
configs = List.of(Constraint.isNotNull(configurations, "List of configurations cannot be null"));
Constraint.isNotEmpty(configs, "At least one configuration is required");
}
@@ -68,7 +68,7 @@ public class JWTSignatureValidationConfigurationCriterion implements Criterion {
* @return the list of configuration instances
*/
@Nonnull @NonnullElements @NotLive @Unmodifiable @NotEmpty
- public List<SignatureValidationConfiguration<SignedJWT>> getConfigurations() {
+ public List<JWTSignatureValidationConfiguration> getConfigurations() {
return configs;
}
diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/criterion/ProviderMetadataCriterion.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/criterion/ProviderMetadataCriterion.java
index e0adc18..7adee02 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/criterion/ProviderMetadataCriterion.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/criterion/ProviderMetadataCriterion.java
@@ -24,6 +24,9 @@ import com.nimbusds.openid.connect.sdk.op.OIDCProviderMetadata;
import net.shibboleth.utilities.java.support.logic.Constraint;
import net.shibboleth.utilities.java.support.resolver.Criterion;
+/**
+ * Proviuder metadata criterion to make decisions based on OpenID Provider information.
+ */
public class ProviderMetadataCriterion implements Criterion {
/** The OIDC provider metadata. */
diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/criterion/StaticCredentialCriterion.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/criterion/StaticCredentialCriterion.java
index 5f638da..56b6e20 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/criterion/StaticCredentialCriterion.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/criterion/StaticCredentialCriterion.java
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
package net.shibboleth.oidc.security.criterion;
import javax.annotation.Nonnull;
@@ -7,7 +24,7 @@ import org.opensaml.security.credential.Credential;
import net.shibboleth.utilities.java.support.logic.Constraint;
import net.shibboleth.utilities.java.support.resolver.Criterion;
-/** A {@link Criterion} that holds a single credential.*/
+/** A {@link Criterion} that holds a single, fixed, credential.*/
public class StaticCredentialCriterion implements Criterion {
/** The credential to hold.*/
diff --git a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/credential/impl/BasicJOSEObjectCredentialResolver.java b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/credential/impl/BasicJOSEObjectCredentialResolver.java
index 1dae249..2fb4e4d 100644
--- a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/credential/impl/BasicJOSEObjectCredentialResolver.java
+++ b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/credential/impl/BasicJOSEObjectCredentialResolver.java
@@ -25,7 +25,6 @@ import javax.annotation.Nullable;
import org.opensaml.security.credential.Credential;
import org.opensaml.security.credential.impl.AbstractCriteriaFilteringCredentialResolver;
-import org.opensaml.xmlsec.keyinfo.impl.KeyInfoResolutionContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -87,7 +86,7 @@ public class BasicJOSEObjectCredentialResolver extends AbstractCriteriaFiltering
header != null ? header.getClass().getName() : "null");
}
- // Extention point for subclasses
+ // Extension point for subclasses
postProcess(criteriaSet, joseObject, credentials);
log.debug("A total of {} credentials were resolved", credentials.size());
@@ -99,8 +98,8 @@ public class BasicJOSEObjectCredentialResolver extends AbstractCriteriaFiltering
/**
* Hook for subclasses to do post-processing of the credential set after all JOSE header keys have been processed.
*
- * For example, the previously resolved credentials might be used to index into a store of local credentials, where
- * the index is a key name or the public half of a key pair extracted from the headers.
+ * <p>For example, the previously resolved credentials might be used to index into a store of local credentials,
+ * where the index is a key name or the public half of a key pair extracted from the headers.</p>
*
* @param criteriaSet the credential criteria used to resolve credentials
* @param joseObject the extracted JOSE object
@@ -111,7 +110,7 @@ public class BasicJOSEObjectCredentialResolver extends AbstractCriteriaFiltering
protected void postProcess(@Nullable final CriteriaSet criteriaSet, @Nonnull final JOSEObject joseObject,
@Nonnull final List<Credential> credentials)
throws ResolverException {
-
+ //no-op
}
/**
diff --git a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/credential/impl/CriterionCredentialResolver.java b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/credential/impl/CriterionCredentialResolver.java
index 9a8eaa2..2255893 100644
--- a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/credential/impl/CriterionCredentialResolver.java
+++ b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/credential/impl/CriterionCredentialResolver.java
@@ -35,6 +35,7 @@ import net.shibboleth.utilities.java.support.resolver.ResolverException;
/**
* Extracts a credential held inside the {@link StaticCredentialCriterion} from the given criteria set.
+ * Supports credential filter via evaluable criterion.
*/
public class CriterionCredentialResolver extends BasicJOSEObjectCredentialResolver {
diff --git a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/credential/impl/LocalJOSEObjectCredentialResolver.java b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/credential/impl/LocalJOSEObjectCredentialResolver.java
index 7f11e47..3c730b9 100644
--- a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/credential/impl/LocalJOSEObjectCredentialResolver.java
+++ b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/credential/impl/LocalJOSEObjectCredentialResolver.java
@@ -47,7 +47,7 @@ import net.shibboleth.utilities.java.support.resolver.ResolverException;
/**
* A simple specialization of {@link BasicJOSEObjectCredentialResolver}
- * which is capable of using resolving local credentials from a supplied {@link CredentialResolver}
+ * which is capable of resolving local credentials from a supplied {@link CredentialResolver}
* which manages local credentials.
*
* <p>
diff --git a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/credential/impl/ProviderMetadataCredentialResolver.java b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/credential/impl/ProviderMetadataCredentialResolver.java
index 936480d..9244d4b 100644
--- a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/credential/impl/ProviderMetadataCredentialResolver.java
+++ b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/credential/impl/ProviderMetadataCredentialResolver.java
@@ -50,12 +50,12 @@ import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
import net.shibboleth.utilities.java.support.resolver.ResolverException;
/**
- * A {@link LocalJOSEObjectCredentialResolver} that resolves credentials from jwks_uri of an
- * OpenID Provider. Further filtering of credentials is provided by the {@link AbstractCriteriaFilteringCredentialResolver}
- * parent class.
+ * A {@link LocalJOSEObjectCredentialResolver} that resolves credentials from the jwks_uri of an
+ * OpenID Provider. Further filtering of credentials is provided by the
+ * {@link AbstractCriteriaFilteringCredentialResolver} parent class.
*
- * <p>Note, only RSA or EC keys are resolved as these are the only key types which should be exposed in public JWKS
- * documents.</p>
+ * <p>Note, only RSA or EC keys are resolved as these are the only key types which should be exposed in
+ * public JWKS documents.</p>
*/
public class ProviderMetadataCredentialResolver extends BasicJOSEObjectCredentialResolver
implements InitializableComponent {
@@ -70,8 +70,7 @@ public class ProviderMetadataCredentialResolver extends BasicJOSEObjectCredentia
@NonnullAfterInit private RemoteJwkSetCache remoteJwkSetCache;
/** The remote key refresh interval. Default value: 30 minutes. */
- @Positive
- private Duration keyFetchInterval = Duration.ofMinutes(30);
+ @Positive private Duration keyFetchInterval = Duration.ofMinutes(30);
/** {@inheritDoc} */
@Override
@@ -124,6 +123,15 @@ public class ProviderMetadataCredentialResolver extends BasicJOSEObjectCredentia
}
}
+ /**
+ * Fetch the remote JWK Set from the jwk_uri in the OpenID Provider's metadata. Convert each
+ * JWK into a {@link Credential} and return. Only supports EC (key agreement) and RSA (key encryption) keys.
+ *
+ * @param criteriaSet the criteria set
+ * @param metadata the OpenID Provider's metadata
+ *
+ * @return a collection of credentials that represents EC and RSA keys in the remote JWK Set (if any)
+ */
@Nonnull protected Collection<Credential> resolveFromMetadata(@Nonnull final CriteriaSet criteriaSet,
@Nonnull final OIDCProviderMetadata metadata) {
diff --git a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/BaseJWTSignatureSecurityHandler.java b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/BaseJWTSignatureSecurityHandler.java
index 93a63b9..875a27c 100644
--- a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/BaseJWTSignatureSecurityHandler.java
+++ b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/BaseJWTSignatureSecurityHandler.java
@@ -47,6 +47,9 @@ import net.shibboleth.utilities.java.support.logic.Constraint;
import net.shibboleth.utilities.java.support.logic.FunctionSupport;
import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
+/**
+ * Base class for SAML security message handlers which evaluate a JWT signature with a signature trust engine.
+ */
public abstract class BaseJWTSignatureSecurityHandler extends BaseTrustEngineSecurityHandler<SignedJWT> {
/** Class logger. */
@@ -150,6 +153,8 @@ public abstract class BaseJWTSignatureSecurityHandler extends BaseTrustEngineSec
criteriaSet.add( new UsageCriterion(UsageType.SIGNING) );
+ //TODO should we remove this?
+
// final SignedJWTSecurityParametersContext secParamsContext =
// messageContext.getSubcontext(SignedJWTSecurityParametersContext.class);
// if (secParamsContext != null && secParamsContext.getSignatureValidationParameters() != null) {
diff --git a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/BaseSignedJWTTrustEngine.java b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/BaseSignedJWTTrustEngine.java
index 7fd80b6..3f1901f 100644
--- a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/BaseSignedJWTTrustEngine.java
+++ b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/BaseSignedJWTTrustEngine.java
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
package net.shibboleth.oidc.security.impl;
import java.security.interfaces.ECPublicKey;
@@ -37,7 +54,7 @@ public abstract class BaseSignedJWTTrustEngine<TrustBasisType> implements TrustE
private final Logger log = LoggerFactory.getLogger(BaseSignedJWTTrustEngine.class);
/** Resolver of credentials from JOSEObject headers. */
- private JOSEObjectCredentialResolver joseObjectCredentialResolver;
+ private final JOSEObjectCredentialResolver joseObjectCredentialResolver;
/**
* Constructor.
diff --git a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/BasicExpiringJWTSharedSecretCredentialFactoryBean.java b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/BasicExpiringJWTSharedSecretCredentialFactoryBean.java
index 5929dd2..e458357 100644
--- a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/BasicExpiringJWTSharedSecretCredentialFactoryBean.java
+++ b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/BasicExpiringJWTSharedSecretCredentialFactoryBean.java
@@ -39,7 +39,8 @@ import net.shibboleth.utilities.java.support.logic.Constraint;
import net.shibboleth.utilities.java.support.primitive.StringSupport;
/** A factory bean for creating a {@link BasicExpiringJWKCredential} from the static secret injected.*/
-public class BasicExpiringJWTSharedSecretCredentialFactoryBean extends AbstractCredentialFactoryBean<ExpiringJWKCredential> {
+public class BasicExpiringJWTSharedSecretCredentialFactoryBean
+ extends AbstractCredentialFactoryBean<ExpiringJWKCredential> {
/** The secret to use when creating a BasicJWKCredential.*/
@Nullable private String secret;
@@ -47,7 +48,7 @@ public class BasicExpiringJWTSharedSecretCredentialFactoryBean extends AbstractC
/** The JCA algorithm to set on the {@link SecretKey}. Defaults to AES.*/
@Nullable private String jcaAlg = "AES";
- /** The algorithm ('alg') this credential supports.*/
+ /** The key management algorithm ('alg') this credential supports.*/
@Nullable private Algorithm alg;
/**
diff --git a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/BasicJWTEncryptionConfiguration.java b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/BasicJWTEncryptionConfiguration.java
index 4ebc71b..f7be589 100644
--- a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/BasicJWTEncryptionConfiguration.java
+++ b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/BasicJWTEncryptionConfiguration.java
@@ -33,7 +33,7 @@ import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
import net.shibboleth.utilities.java.support.primitive.StringSupport;
/**
- * Basic implementation of {@link JWTEncryptionConfiguration}.
+ * Basic implementation of {@link JWTEncryptionConfiguration} for handling JWE encryption.
*/
public class BasicJWTEncryptionConfiguration extends BasicAlgorithmPolicyConfiguration
implements JWTEncryptionConfiguration {
diff --git a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/BasicJWTSignatureSigningConfiguration.java b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/BasicJWTSignatureSigningConfiguration.java
index 3df19c9..68e846a 100644
--- a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/BasicJWTSignatureSigningConfiguration.java
+++ b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/BasicJWTSignatureSigningConfiguration.java
@@ -34,6 +34,9 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NotLive;
import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
import net.shibboleth.utilities.java.support.primitive.StringSupport;
+/**
+ * The configuration information to use when generating an signed JWT.
+ */
public class BasicJWTSignatureSigningConfiguration extends BasicAlgorithmPolicyConfiguration
implements JWTSignatureSigningConfiguration {
diff --git a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/BasicJWTSignatureSigningParametersResolver.java b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/BasicJWTSignatureSigningParametersResolver.java
index 223c68e..c6d8400 100644
--- a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/BasicJWTSignatureSigningParametersResolver.java
+++ b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/BasicJWTSignatureSigningParametersResolver.java
@@ -49,7 +49,7 @@ import net.shibboleth.utilities.java.support.resolver.ResolverException;
/**
*
- * Basic implementation of {@link JWTSignatureSigningParametersResolver}.
+ * Basic implementation of an {@link JWTSignatureSigningParametersResolver}.
*
* <p>
* The following {@link net.shibboleth.utilities.java.support.resolver.Criterion} inputs are supported:
@@ -60,8 +60,8 @@ import net.shibboleth.utilities.java.support.resolver.ResolverException;
* <p>See also (for the SAML case) {@link BasicSignatureSigningParametersResolver}.</p>
*/
public class BasicJWTSignatureSigningParametersResolver
- extends AbstractSecurityParametersResolver<JWTSignatureSigningParameters>
- implements JWTSignatureSigningParametersResolver {
+ extends AbstractSecurityParametersResolver<JWTSignatureSigningParameters>
+ implements JWTSignatureSigningParametersResolver {
private final Logger log = LoggerFactory.getLogger(BasicJWTSignatureSigningParametersResolver.class);
@@ -148,7 +148,8 @@ public class BasicJWTSignatureSigningParametersResolver
}
/**
- * Validate that the {@link JWTSignatureSigningParameters} instance has all the required properties populated.
+ * Validate that the {@link JWTSignatureSigningParameters} instance has all the required
+ * properties populated.
*
* @param params the parameters instance to evaluate
*
diff --git a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/BasicSignatureValidationConfiguration.java b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/BasicJWTSignatureValidationConfiguration.java
similarity index 68%
rename from oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/BasicSignatureValidationConfiguration.java
rename to oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/BasicJWTSignatureValidationConfiguration.java
index b3f3856..9471a3c 100644
--- a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/BasicSignatureValidationConfiguration.java
+++ b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/BasicJWTSignatureValidationConfiguration.java
@@ -20,28 +20,29 @@ package net.shibboleth.oidc.security.impl;
import javax.annotation.Nullable;
import org.opensaml.security.trust.TrustEngine;
-import org.opensaml.xmlsec.impl.BasicWhitelistBlacklistConfiguration;
+import org.opensaml.xmlsec.impl.BasicAlgorithmPolicyConfiguration;
-import net.shibboleth.oidc.security.SignatureValidationConfiguration;
+import com.nimbusds.jwt.SignedJWT;
+import net.shibboleth.oidc.security.JWTSignatureValidationConfiguration;
-//TODO same as BasicSignatureValidationConfiguration. Needs to not be generic, but for JWT Trust Engine?
-public class BasicSignatureValidationConfiguration<T> extends BasicWhitelistBlacklistConfiguration
- implements SignatureValidationConfiguration<T> {
-
+
+/**
+ * Basic implementation of {@link JWTSignatureValidationConfiguration} for signed JWTs.
+ */
+public class BasicJWTSignatureValidationConfiguration extends BasicAlgorithmPolicyConfiguration
+ implements JWTSignatureValidationConfiguration {
/** The signature trust engine to use. */
- @Nullable private TrustEngine<T> signatureTrustEngine;
-
- //TODO chaining to parent config instance on getters? or use a wrapping proxy, etc?
-
+ @Nullable private TrustEngine<SignedJWT> signatureTrustEngine;
+
/**
* Get the signature trust engine to use.
*
* @return the signature trust engine
*/
@Override
- @Nullable public TrustEngine<T> getSignatureTrustEngine() {
+ @Nullable public TrustEngine<SignedJWT> getSignatureTrustEngine() {
return signatureTrustEngine;
}
@@ -50,7 +51,7 @@ public class BasicSignatureValidationConfiguration<T> extends BasicWhitelistBlac
*
* @param engine the signature trust engine
*/
- public void setSignatureTrustEngine(@Nullable final TrustEngine<T> engine) {
+ public void setSignatureTrustEngine(@Nullable final TrustEngine<SignedJWT> engine) {
signatureTrustEngine = engine;
}
diff --git a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/OIDCProviderConfigurationSignatureValidationParametersResolver.java b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/BasicJWTSignatureValidationParametersResolver.java
similarity index 71%
rename from oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/OIDCProviderConfigurationSignatureValidationParametersResolver.java
rename to oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/BasicJWTSignatureValidationParametersResolver.java
index 294cf86..d0b5dbc 100644
--- a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/OIDCProviderConfigurationSignatureValidationParametersResolver.java
+++ b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/BasicJWTSignatureValidationParametersResolver.java
@@ -23,7 +23,7 @@ import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import org.opensaml.security.trust.TrustEngine;
-
+import org.opensaml.xmlsec.criterion.SignatureValidationConfigurationCriterion;
import org.opensaml.xmlsec.impl.AbstractSecurityParametersResolver;
import org.opensaml.xmlsec.signature.support.SignatureTrustEngine;
import org.slf4j.Logger;
@@ -31,30 +31,41 @@ import org.slf4j.LoggerFactory;
import com.nimbusds.jwt.SignedJWT;
-import net.shibboleth.oidc.security.SignatureValidationConfiguration;
-import net.shibboleth.oidc.security.SignatureValidationParameters;
-import net.shibboleth.oidc.security.SignatureValidationParametersResolver;
+import net.shibboleth.oidc.security.JWTSignatureValidationConfiguration;
+import net.shibboleth.oidc.security.JWTSignatureValidationParameters;
+import net.shibboleth.oidc.security.JWTSignatureValidationParametersResolver;
import net.shibboleth.oidc.security.criterion.JWTSignatureValidationConfigurationCriterion;
import net.shibboleth.utilities.java.support.logic.Constraint;
import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
import net.shibboleth.utilities.java.support.resolver.ResolverException;
-public class OIDCProviderConfigurationSignatureValidationParametersResolver
- extends AbstractSecurityParametersResolver<SignatureValidationParameters<SignedJWT>>
- implements SignatureValidationParametersResolver<SignedJWT> {
+
+/**
+ * Basic implementation of {@link JWTSignatureValidationParametersResolver}.
+ *
+ * <p>
+ * The following {@link net.shibboleth.utilities.java.support.resolver.Criterion} inputs are supported:
+ * </p>
+ * <ul>
+ * <li>{@link JWTSignatureValidationConfigurationCriterion} - required</li>
+ * </ul>
+ */
+public class BasicJWTSignatureValidationParametersResolver
+ extends AbstractSecurityParametersResolver<JWTSignatureValidationParameters>
+ implements JWTSignatureValidationParametersResolver {
/** Logger. */
@Nonnull
private final Logger log =
- LoggerFactory.getLogger(OIDCProviderConfigurationSignatureValidationParametersResolver.class);
+ LoggerFactory.getLogger(BasicJWTSignatureValidationParametersResolver.class);
/** {@inheritDoc} */
@Override
@Nonnull
- public Iterable<SignatureValidationParameters<SignedJWT>> resolve(@Nonnull final CriteriaSet criteria)
+ public Iterable<JWTSignatureValidationParameters> resolve(@Nonnull final CriteriaSet criteria)
throws ResolverException {
- final SignatureValidationParameters<SignedJWT> params = resolveSingle(criteria);
+ final JWTSignatureValidationParameters params = resolveSingle(criteria);
if (params != null) {
return Collections.singletonList(params);
}
@@ -64,12 +75,12 @@ public class OIDCProviderConfigurationSignatureValidationParametersResolver
/** {@inheritDoc} */
@Override
@Nullable
- public SignatureValidationParameters<SignedJWT> resolveSingle(@Nonnull final CriteriaSet criteria) throws ResolverException {
+ public JWTSignatureValidationParameters resolveSingle(@Nonnull final CriteriaSet criteria) throws ResolverException {
Constraint.isNotNull(criteria, "CriteriaSet was null");
Constraint.isNotNull(criteria.get(JWTSignatureValidationConfigurationCriterion.class),
"Resolver requires an instance of SignatureValidationConfigurationCriterion");
- final SignatureValidationParameters<SignedJWT> params = new SignatureValidationParameters<>();
+ final JWTSignatureValidationParameters params = new JWTSignatureValidationParameters();
resolveAndPopulateIncludesExcludes(params, criteria,
criteria.get(JWTSignatureValidationConfigurationCriterion.class).getConfigurations());
@@ -86,7 +97,7 @@ public class OIDCProviderConfigurationSignatureValidationParametersResolver
*
* @param params the resolved param
*/
- protected void logResult(@Nonnull final SignatureValidationParameters<SignedJWT> params) {
+ protected void logResult(@Nonnull final JWTSignatureValidationParameters params) {
if (log.isDebugEnabled()) {
log.debug("Resolved JWT SignatureValidationParameters:");
@@ -107,7 +118,7 @@ public class OIDCProviderConfigurationSignatureValidationParametersResolver
@Nullable
protected TrustEngine<SignedJWT> resolveSignatureTrustEngine(@Nonnull final CriteriaSet criteria) {
- for (final SignatureValidationConfiguration<SignedJWT> config : criteria
+ for (final JWTSignatureValidationConfiguration config : criteria
.get(JWTSignatureValidationConfigurationCriterion.class).getConfigurations()) {
if (config.getSignatureTrustEngine() != null) {
return config.getSignatureTrustEngine();
diff --git a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/DefaultJWTDecryptionParametersResolver.java b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/DefaultJWTDecryptionParametersResolver.java
index 45c7ea0..73ecabc 100644
--- a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/DefaultJWTDecryptionParametersResolver.java
+++ b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/DefaultJWTDecryptionParametersResolver.java
@@ -36,6 +36,16 @@ import net.shibboleth.utilities.java.support.logic.Constraint;
import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
import net.shibboleth.utilities.java.support.resolver.ResolverException;
+/**
+ * Basic implementation of {@link JWTDecryptionParametersResolver}.
+ *
+ * <p>
+ * The following {@link net.shibboleth.utilities.java.support.resolver.Criterion} inputs are supported:
+ * </p>
+ * <ul>
+ * <li>{@link JWTDecryptionConfigurationCriterion} - required</li>
+ * </ul>
+ */
public class DefaultJWTDecryptionParametersResolver extends AbstractSecurityParametersResolver<JWTDecryptionParameters>
implements JWTDecryptionParametersResolver {
@@ -64,6 +74,7 @@ public class DefaultJWTDecryptionParametersResolver extends AbstractSecurityPara
params.setContentEncryptionKeyCredentialResolver(resolveContentEncryptionKeyCredentialResolver(criteria));
params.setKEKCredentialResolver(resolveKEKCredentialResolver(criteria));
+
//TODO why not this?
//params.setEncryptedKeyResolver(resolveEncryptedKeyResolver(criteria));
diff --git a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/DefaultJWTEncryptionParametersResolver.java b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/DefaultJWTEncryptionParametersResolver.java
index a77ab90..980054e 100644
--- a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/DefaultJWTEncryptionParametersResolver.java
+++ b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/DefaultJWTEncryptionParametersResolver.java
@@ -66,8 +66,7 @@ import net.shibboleth.utilities.java.support.resolver.ResolverException;
/**
* Basic implementation of an {@link EncryptionParametersResolver}. The resolver delegates much of its functionality
- * to various lookup strategies and credential resolvers. Its main purpose is to compose the results of each strategy
- * and resolver.
+ * to various lookup strategies and credential resolvers. Its main purpose is to compose the results.
*
* <p>The set of usable key transport and data encryption algorithms are determined by injected strategies. The set of
* usable credentials are resolved by {@link CredentialResolver}s found from the {@link JWTEncryptionConfiguration}
@@ -442,7 +441,7 @@ public class DefaultJWTEncryptionParametersResolver extends AbstractSecurityPara
} else if (JWEAlgorithm.Family.AES_GCM_KW.contains(algorithm)
|| JWEAlgorithm.Family.AES_KW.contains(algorithm)) {
- // Key agreement requires a derived key
+ // Key wrapping requires a derived key
final JWKCredential credential =
findCredentialThatSupportsAlgorithm(keyTransportCredentials, algorithm);
diff --git a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/ExplicitKeySignedJWTTrustEngine.java b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/ExplicitKeySignedJWTTrustEngine.java
index f4d8869..78ee161 100644
--- a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/ExplicitKeySignedJWTTrustEngine.java
+++ b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/ExplicitKeySignedJWTTrustEngine.java
@@ -42,6 +42,18 @@ import net.shibboleth.utilities.java.support.logic.Constraint;
import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
import net.shibboleth.utilities.java.support.resolver.ResolverException;
+
+/**
+ * An implementation of {@link org.opensaml.xmlsec.signature.support.SignatureTrustEngine} which evaluates the validity
+ * and trustworthiness of JWT signatures.
+ *
+ * <p>
+ * Processing is first performed as described in {@link BaseSignedJWTTrustEngine}. If based on this processing, it is
+ * determined that the token does not present or does not contain a resolveable valid (and trusted) signing
+ * key, then all trusted credentials obtained by the trusted credential resolver will be used to attempt to validate the
+ * signature.
+ * </p>
+ */
public class ExplicitKeySignedJWTTrustEngine extends BaseSignedJWTTrustEngine<Iterable<Credential>>
implements TrustedCredentialTrustEngine<SignedJWT> {
diff --git a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/JWTDecrypter.java b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/JWTDecrypter.java
index a199551..dfe4448 100644
--- a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/JWTDecrypter.java
+++ b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/JWTDecrypter.java
@@ -86,7 +86,7 @@ public class JWTDecrypter {
/** Class logger. */
private final Logger log = LoggerFactory.getLogger(JWTDecrypter.class);
- /** The OIDC decryption parameters. */
+ /** The JWT decryption parameters. */
private final JWTDecryptionParameters params;
/**
@@ -101,11 +101,12 @@ public class JWTDecrypter {
/**
* Decrypt a JWE object using credentials resolved from the CEK and KEK resolvers
- * inside the decryption parameters.
+ * inside the decryption parameters. Supports Direct Encryption, Key Encryption,
+ * Key Wrapping, and Key Agreement management modes.
*
* @param encryptedObject JWE object to decrypt.
*
- * @return Decrypted request object.
+ * @return Decrypted JWT object.
*
* @throws DecryptionException on failure to decrypt the JWT.
*/
@@ -166,7 +167,7 @@ public class JWTDecrypter {
final CriteriaSet newCriteriaSet = new CriteriaSet();
// Add any additional criteria that have been passed through from the params.
- if (params.getAdditionalCriteria() != null) {
+ if (!params.getAdditionalCriteria().isEmpty()) {
params.getAdditionalCriteria().forEach(newCriteriaSet::add);
}
if (criteria != null) {
diff --git a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/JWTMessageSignatureSecurityHandler.java b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/JWTMessageSignatureSecurityHandler.java
index d5fcb04..a1389f8 100644
--- a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/JWTMessageSignatureSecurityHandler.java
+++ b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/JWTMessageSignatureSecurityHandler.java
@@ -24,7 +24,9 @@ import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import org.opensaml.messaging.context.MessageContext;
+import org.opensaml.messaging.handler.MessageHandler;
import org.opensaml.messaging.handler.MessageHandlerException;
+import org.opensaml.security.trust.TrustEngine;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -37,6 +39,15 @@ import net.shibboleth.utilities.java.support.component.ComponentInitializationEx
import net.shibboleth.utilities.java.support.component.ComponentSupport;
import net.shibboleth.utilities.java.support.logic.Constraint;
+/**
+ * A {@link MessageHandler} that uses a {@link TrustEngine} to evaluate the signature of a signed JWT.
+ *
+ * <p>Note, if the JWT is not in a signed state an exception will be thrown i.e. JWTs must be signed by
+ * the time this handler executes.</p>
+ *
+ * <p>Also, the JWT must also have claims, otherwise an exception is throw. This restriction could be lifted
+ * if it is feasible to check the signature of a JWT with a null payload - even if pointless?</p>
+ */
public class JWTMessageSignatureSecurityHandler extends BaseJWTSignatureSecurityHandler {
/** Logger. */
diff --git a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/PopulateJWTSignatureSigningParameters.java b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/PopulateJWTSignatureSigningParameters.java
index 84536d1..6dfb406 100644
--- a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/PopulateJWTSignatureSigningParameters.java
+++ b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/PopulateJWTSignatureSigningParameters.java
@@ -1,6 +1,5 @@
package net.shibboleth.oidc.security.impl;
-import java.util.Collections;
import java.util.List;
import java.util.function.Function;
@@ -14,7 +13,6 @@ import org.opensaml.profile.action.AbstractHandlerDelegatingProfileAction;
import org.opensaml.profile.action.EventIds;
import org.opensaml.profile.context.ProfileRequestContext;
import org.opensaml.profile.context.navigate.OutboundMessageContextLookup;
-import org.opensaml.xmlsec.SecurityConfigurationSupport;
import org.opensaml.xmlsec.SignatureSigningConfiguration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -22,6 +20,7 @@ import org.slf4j.LoggerFactory;
import net.shibboleth.oidc.metadata.context.OIDCMetadataContext;
import net.shibboleth.oidc.metadata.context.OIDCProviderMetadataContext;
import net.shibboleth.oidc.security.JWTSignatureSigningConfiguration;
+import net.shibboleth.oidc.security.JWTSignatureSigningParameters;
import net.shibboleth.oidc.security.JWTSignatureSigningParametersResolver;
import net.shibboleth.oidc.security.context.JWTSecurityParametersContext;
import net.shibboleth.utilities.java.support.annotation.ParameterName;
@@ -30,6 +29,15 @@ import net.shibboleth.utilities.java.support.component.ComponentInitializationEx
import net.shibboleth.utilities.java.support.component.ComponentSupport;
import net.shibboleth.utilities.java.support.logic.Constraint;
+
+/**
+ * Action that resolves and populates {@link JWTSignatureSigningParameters} on a {@link JWTSecurityParametersContext}
+ * created/accessed via a lookup function, by default on the outbound message context.
+ *
+ * @event {@link EventIds#PROCEED_EVENT_ID}
+ * @event {@link EventIds#INVALID_MSG_CTX}
+ * @event {@link EventIds#INVALID_SEC_CFG}
+ */
public class PopulateJWTSignatureSigningParameters
extends AbstractHandlerDelegatingProfileAction<PopulateJWTSignatureSigningParametersHandler> {
diff --git a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/PopulateJWTSignatureSigningParametersHandler.java b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/PopulateJWTSignatureSigningParametersHandler.java
index f1243cb..a87f54e 100644
--- a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/PopulateJWTSignatureSigningParametersHandler.java
+++ b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/PopulateJWTSignatureSigningParametersHandler.java
@@ -29,6 +29,9 @@ import org.opensaml.messaging.context.navigate.RecursiveTypedParentContextLookup
import org.opensaml.messaging.handler.AbstractMessageHandler;
import org.opensaml.messaging.handler.MessageHandlerException;
import org.opensaml.profile.context.ProfileRequestContext;
+import org.opensaml.saml.common.messaging.context.SAMLMetadataContext;
+import org.opensaml.saml.common.messaging.context.SAMLPeerEntityContext;
+import org.opensaml.saml.criterion.RoleDescriptorCriterion;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -51,6 +54,15 @@ import net.shibboleth.utilities.java.support.logic.Constraint;
import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
import net.shibboleth.utilities.java.support.resolver.ResolverException;
+/**
+ *
+ * Handler that resolves and populates {@link JWTSignatureSigningParameters} on a {@link JWTSecurityParametersContext}
+ * created/accessed via a lookup function, by default as an immediate child context of the target
+ * {@link MessageContext}.
+ *
+ * <p>Extracts any OpenID client/provider metadata, SAML metadata, and static client credentials
+ * from relying party configuration as criteria to pass to the signing parameters resolver. </p>
+ */
public class PopulateJWTSignatureSigningParametersHandler extends AbstractMessageHandler {
/** Class logger. */
@@ -66,6 +78,9 @@ public class PopulateJWTSignatureSigningParametersHandler extends AbstractMessag
/** Strategy used to look up a per-request {@link JWTSignatureSigningConfiguration} list. */
@NonnullAfterInit private Function<MessageContext, List<JWTSignatureSigningConfiguration>> configurationLookupStrategy;
+ /** Strategy used to look up a SAML metadata context. */
+ @Nonnull private Function<MessageContext, SAMLMetadataContext> metadataContextLookupStrategy;
+
/** Strategy used to look up a OIDC client metadata context. */
@Nonnull private Function<MessageContext, OIDCMetadataContext> oidcClientMetadataContextLookupStrategy;
@@ -84,11 +99,17 @@ public class PopulateJWTSignatureSigningParametersHandler extends AbstractMessag
/** Constructor.*/
public PopulateJWTSignatureSigningParametersHandler() {
+ // Create context by default.
securityParametersContextLookupStrategy = new ChildContextLookup<>(JWTSecurityParametersContext.class, true);
+ // Locate directly under input context.
oidcClientMetadataContextLookupStrategy = new ChildContextLookup<>(OIDCMetadataContext.class);
+ // Locate directly under input context.
oidcProviderMetadataContextLookupStrategy = new ChildContextLookup<>(OIDCProviderMetadataContext.class);
relyingPartyContextLookupStrategy = new ChildContextLookup<>(RelyingPartyContext.class)
.compose(new RecursiveTypedParentContextLookup<>(ProfileRequestContext.class));
+ // Default: msg context -> SAMLPeerEntityContext -> SAMLMetadataContext
+ metadataContextLookupStrategy = new ChildContextLookup<>(SAMLMetadataContext.class).compose(
+ new ChildContextLookup<>(SAMLPeerEntityContext.class));
}
/**
@@ -168,6 +189,19 @@ public class PopulateJWTSignatureSigningParametersHandler extends AbstractMessag
existingParametersContextLookupStrategy = strategy;
}
+ /**
+ * Set lookup strategy for {@link SAMLMetadataContext} for input to resolution.
+ *
+ * @param strategy lookup strategy
+ */
+ public void setMetadataContextLookupStrategy(
+ @Nonnull final Function<MessageContext,SAMLMetadataContext> strategy) {
+ ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+
+ metadataContextLookupStrategy =
+ Constraint.isNotNull(strategy, "SAMLMetadataContext lookup strategy cannot be null");
+ }
+
/**
* Set the strategy used to look up a per-request {@link JWTSignatureSigningConfiguration} list.
*
@@ -245,6 +279,12 @@ public class PopulateJWTSignatureSigningParametersHandler extends AbstractMessag
}
final CriteriaSet criteria = new CriteriaSet(new JWTSignatureSigningConfigurationCriterion(configs));
+
+ final SAMLMetadataContext metadataCtx = metadataContextLookupStrategy.apply(messageContext);
+ if (metadataCtx != null && metadataCtx.getRoleDescriptor() != null) {
+ log.debug("{} Adding metadata to resolution criteria for signing/digest algorithms", getLogPrefix());
+ criteria.add(new RoleDescriptorCriterion(metadataCtx.getRoleDescriptor()));
+ }
// Add client metadata criterion
final OIDCMetadataContext oidcMetadataCtx = oidcClientMetadataContextLookupStrategy.apply(messageContext);
diff --git a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/PopulateJWTSignatureValidationParameters.java b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/PopulateJWTSignatureValidationParameters.java
index 76266c6..7f2b0c0 100644
--- a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/PopulateJWTSignatureValidationParameters.java
+++ b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/PopulateJWTSignatureValidationParameters.java
@@ -32,11 +32,9 @@ import org.opensaml.profile.context.navigate.InboundMessageContextLookup;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.nimbusds.jwt.SignedJWT;
-
-import net.shibboleth.oidc.security.SignatureValidationConfiguration;
-import net.shibboleth.oidc.security.SignatureValidationParameters;
-import net.shibboleth.oidc.security.SignatureValidationParametersResolver;
+import net.shibboleth.oidc.security.JWTSignatureValidationConfiguration;
+import net.shibboleth.oidc.security.JWTSignatureValidationParameters;
+import net.shibboleth.oidc.security.JWTSignatureValidationParametersResolver;
import net.shibboleth.oidc.security.context.JWTSecurityParametersContext;
import net.shibboleth.utilities.java.support.annotation.ParameterName;
import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
@@ -45,7 +43,7 @@ import net.shibboleth.utilities.java.support.component.ComponentSupport;
import net.shibboleth.utilities.java.support.logic.Constraint;
/**
- * Action that resolves and populates {@link SignatureValidationParameters} on a {@link JWTSecurityParametersContext}
+ * Action that resolves and populates {@link JWTSignatureValidationParameters} on a {@link JWTSecurityParametersContext}
* created/accessed via a lookup function, by default on the inbound message context.
*
* @event {@link EventIds#PROCEED_EVENT_ID}
@@ -61,12 +59,12 @@ public class PopulateJWTSignatureValidationParameters
/** Strategy used to look up the {@link JWTSecurityParametersContext} to set the parameters for. */
@Nonnull private Function<ProfileRequestContext,JWTSecurityParametersContext> securityParametersContextLookupStrategy;
- /** Strategy used to lookup a per-request {@link SignatureValidationConfiguration} list. */
+ /** Strategy used to lookup a per-request {@link JWTSignatureValidationConfiguration} list. */
@NonnullAfterInit
- private Function<ProfileRequestContext,List<SignatureValidationConfiguration<SignedJWT>>> configurationLookupStrategy;
+ private Function<ProfileRequestContext,List<JWTSignatureValidationConfiguration>> configurationLookupStrategy;
/** Resolver for parameters to store into context. */
- @NonnullAfterInit private SignatureValidationParametersResolver<SignedJWT> resolver;
+ @NonnullAfterInit private JWTSignatureValidationParametersResolver resolver;
/**
* Constructor.
@@ -97,12 +95,12 @@ public class PopulateJWTSignatureValidationParameters
}
/**
- * Set the strategy used to look up a per-request {@link SignatureValidationConfiguration} list.
+ * Set the strategy used to look up a per-request {@link JWTSignatureValidationConfiguration} list.
*
* @param strategy lookup strategy
*/
public void setConfigurationLookupStrategy(
- @Nonnull final Function<ProfileRequestContext,List<SignatureValidationConfiguration<SignedJWT>>> strategy) {
+ @Nonnull final Function<ProfileRequestContext,List<JWTSignatureValidationConfiguration>> strategy) {
ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
configurationLookupStrategy = Constraint.isNotNull(strategy,
@@ -115,7 +113,7 @@ public class PopulateJWTSignatureValidationParameters
* @param newResolver resolver to use
*/
public void setSignatureValidationParametersResolver(
- @Nonnull final SignatureValidationParametersResolver<SignedJWT> newResolver) {
+ @Nonnull final JWTSignatureValidationParametersResolver newResolver) {
ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
resolver = Constraint.isNotNull(newResolver, "SignatureValidationParametersResolver cannot be null");
diff --git a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/PopulateJWTSignatureValidationParametersHandler.java b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/PopulateJWTSignatureValidationParametersHandler.java
index 17f6eee..60a9881 100644
--- a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/PopulateJWTSignatureValidationParametersHandler.java
+++ b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/PopulateJWTSignatureValidationParametersHandler.java
@@ -31,9 +31,9 @@ import org.slf4j.LoggerFactory;
import com.nimbusds.jwt.SignedJWT;
-import net.shibboleth.oidc.security.SignatureValidationConfiguration;
-import net.shibboleth.oidc.security.SignatureValidationParameters;
-import net.shibboleth.oidc.security.SignatureValidationParametersResolver;
+import net.shibboleth.oidc.security.JWTSignatureValidationConfiguration;
+import net.shibboleth.oidc.security.JWTSignatureValidationParameters;
+import net.shibboleth.oidc.security.JWTSignatureValidationParametersResolver;
import net.shibboleth.oidc.security.context.JWTSecurityParametersContext;
import net.shibboleth.oidc.security.criterion.JWTSignatureValidationConfigurationCriterion;
import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
@@ -45,7 +45,7 @@ import net.shibboleth.utilities.java.support.resolver.ResolverException;
/**
- * Handler that resolves and populates {@link SignatureValidationParameters} on a {@link JWTSecurityParametersContext}
+ * Handler that resolves and populates {@link JWTSignatureValidationParameters} on a {@link JWTSecurityParametersContext}
* created/accessed via a lookup function, by default as an immediate child context of the target
* {@link MessageContext}.
*/
@@ -57,12 +57,12 @@ public class PopulateJWTSignatureValidationParametersHandler extends AbstractMes
/** Strategy used to look up the {@link JWTSecurityParametersContext} to set the parameters for. */
@Nonnull private Function<MessageContext,JWTSecurityParametersContext> securityParametersContextLookupStrategy;
- /** Strategy used to lookup a per-request {@link SignatureValidationConfiguration} list. */
+ /** Strategy used to lookup a per-request {@link JWTSignatureValidationConfiguration} list. */
@NonnullAfterInit
- private Function<MessageContext,List<SignatureValidationConfiguration<SignedJWT>>> configurationLookupStrategy;
+ private Function<MessageContext,List<JWTSignatureValidationConfiguration>> configurationLookupStrategy;
/** Resolver for parameters to store into context. */
- @NonnullAfterInit private SignatureValidationParametersResolver<SignedJWT> resolver;
+ @NonnullAfterInit private JWTSignatureValidationParametersResolver resolver;
/**
* Constructor.
@@ -86,12 +86,12 @@ public class PopulateJWTSignatureValidationParametersHandler extends AbstractMes
}
/**
- * Set the strategy used to look up a per-request {@link SignatureValidationConfiguration} list.
+ * Set the strategy used to look up a per-request {@link JWTSignatureValidationConfiguration} list.
*
* @param strategy lookup strategy
*/
public void setConfigurationLookupStrategy(
- @Nonnull final Function<MessageContext,List<SignatureValidationConfiguration<SignedJWT>>> strategy) {
+ @Nonnull final Function<MessageContext,List<JWTSignatureValidationConfiguration>> strategy) {
ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
configurationLookupStrategy = Constraint.isNotNull(strategy,
@@ -104,7 +104,7 @@ public class PopulateJWTSignatureValidationParametersHandler extends AbstractMes
* @param newResolver resolver to use
*/
public void setSignatureValidationParametersResolver(
- @Nonnull final SignatureValidationParametersResolver<SignedJWT> newResolver) {
+ @Nonnull final JWTSignatureValidationParametersResolver newResolver) {
ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
resolver = Constraint.isNotNull(newResolver, "SignatureValidationParametersResolver cannot be null");
@@ -129,7 +129,7 @@ public class PopulateJWTSignatureValidationParametersHandler extends AbstractMes
log.debug("{} Resolving SignatureValidationParameters for request", getLogPrefix());
- final List<SignatureValidationConfiguration<SignedJWT>> configs =
+ final List<JWTSignatureValidationConfiguration> configs =
configurationLookupStrategy.apply(messageContext);
if (configs == null || configs.isEmpty()) {
log.error("{} No SignatureValidationConfiguration returned by lookup strategy", getLogPrefix());
@@ -144,7 +144,7 @@ public class PopulateJWTSignatureValidationParametersHandler extends AbstractMes
}
try {
- final SignatureValidationParameters<SignedJWT> params = resolver.resolveSingle(
+ final JWTSignatureValidationParameters params = resolver.resolveSingle(
new CriteriaSet(new JWTSignatureValidationConfigurationCriterion(configs)));
paramsCtx.setSignatureValidationParameters(params);
log.debug("{} {} SignatureValidationParameters", getLogPrefix(),
diff --git a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/ProviderMetadataKeyTransportEncryptionAlgorithmsLookupStrategy.java b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/ProviderMetadataKeyTransportEncryptionAlgorithmsLookupStrategy.java
index 0b88e00..bad6243 100644
--- a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/ProviderMetadataKeyTransportEncryptionAlgorithmsLookupStrategy.java
+++ b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/ProviderMetadataKeyTransportEncryptionAlgorithmsLookupStrategy.java
@@ -58,7 +58,7 @@ public class ProviderMetadataKeyTransportEncryptionAlgorithmsLookupStrategy
/**
* A strategy to locate the algorithms ('alg') appropriate for the JWT to be encrypted.
- * Can return {@code null} if the metadata does not describe its support algorithms (which is optional).
+ * Can return {@code null} if the metadata does not describe its supported algorithms (which is optional).
*/
@Nonnull
private final Function<OIDCProviderMetadata, List<JWEAlgorithm>> providerKeyTransportAlgorithmsLookupStrategy;
diff --git a/oidc-common-metadata-impl/src/test/java/net/shibboleth/oidc/metadata/impl/OIDCProviderMetadataResolverTest.java b/oidc-common-metadata-impl/src/test/java/net/shibboleth/oidc/metadata/impl/OIDCProviderMetadataResolverTest.java
index c29e72f..a4727a7 100644
--- a/oidc-common-metadata-impl/src/test/java/net/shibboleth/oidc/metadata/impl/OIDCProviderMetadataResolverTest.java
+++ b/oidc-common-metadata-impl/src/test/java/net/shibboleth/oidc/metadata/impl/OIDCProviderMetadataResolverTest.java
@@ -15,7 +15,6 @@
* limitations under the License.
*/
-
package net.shibboleth.oidc.metadata.impl;
import static org.mockito.ArgumentMatchers.any;
@@ -479,22 +478,7 @@ public class OIDCProviderMetadataResolverTest {
class WrongTypeOfCriterion implements Criterion {
}
-
-
- @Test
- void testResponseHandler() throws IOException {
- final OIDCProviderMetadataResponseHandler handler = new OIDCProviderMetadataResponseHandler();
- final BasicHttpResponse httpResponse =
- new BasicHttpResponse(new ProtocolVersion("HTTP", 1, 1), HttpStatus.SC_OK, "OK");
- final ByteArrayEntity entity = new ByteArrayEntity(GOOD_PROVIDER_CONFIGURATION_INFO.getBytes());
- entity.setContentType(new BasicHeader(HttpHeaders.CONTENT_TYPE, "application/json"));
- httpResponse.setEntity(entity);
- final OIDCProviderMetadata metadata = handler.handleResponse(httpResponse);
-
- assertNotNull(metadata);
- assertTrue("https://example.oidc.op.org".equals(metadata.getIssuer().getValue()));
- }
-
+
@Test
void testResponseHandler_WrongMIMEType() throws IOException {
final OIDCProviderMetadataResponseHandler handler = new OIDCProviderMetadataResponseHandler();
diff --git a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/OIDCAuthorizationConfiguration.java b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/OIDCAuthorizationConfiguration.java
index 291b864..4087527 100644
--- a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/OIDCAuthorizationConfiguration.java
+++ b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/OIDCAuthorizationConfiguration.java
@@ -764,6 +764,15 @@ public class OIDCAuthorizationConfiguration extends AbstractOIDCSSOConfiguration
return responseTypeLookupStrategy.apply(profileRequestContext);
}
+ /**
+ * Get the bi-function for manipulating authorization code claims set.
+ *
+ * @param profileRequestContext profile request context
+ *
+ * @return the bi-function for manipulating authorization code claims set
+ *
+ * @since 2.1.0
+ */
@Nonnull
public BiFunction<ProfileRequestContext,Map<String,Object>,Map<String,Object>>
getAuthorizationCodeClaimsSetManipulationStrategy(
@@ -782,6 +791,20 @@ public class OIDCAuthorizationConfiguration extends AbstractOIDCSSOConfiguration
@Nullable final BiFunction<ProfileRequestContext,Map<String,Object>,Map<String,Object>> strategy) {
authorizationCodeClaimsSetManipulationStrategyLookupStrategy = FunctionSupport.constant(strategy);
}
+
+ /**
+ * Set a lookup strategy for the bi-function for manipulating authorization code claims set.
+ *
+ * @param strategy lookup strategy
+ *
+ * @since 2.1.0
+ */
+ public void setAuthorizationCodeClaimsSetManipulationStrategyLookupStrategy(@Nonnull final
+ Function<ProfileRequestContext,BiFunction<ProfileRequestContext,Map<String,Object>,Map<String,Object>>>
+ strategy) {
+ authorizationCodeClaimsSetManipulationStrategyLookupStrategy = Constraint.isNotNull(strategy,
+ "Lookup strategy cannot be null");
+ }
/**
* Set the lookup strategy to determine the scopes to use for authentication requests.
diff --git a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/OIDCSecurityConfiguration.java b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/OIDCSecurityConfiguration.java
index 35e4e4b..35d0c66 100644
--- a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/OIDCSecurityConfiguration.java
+++ b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/OIDCSecurityConfiguration.java
@@ -22,21 +22,21 @@ import javax.annotation.Nullable;
import org.opensaml.xmlsec.EncryptionConfiguration;
import org.opensaml.xmlsec.SignatureSigningConfiguration;
-import com.nimbusds.jwt.SignedJWT;
-
import net.shibboleth.idp.profile.config.SecurityConfiguration;
+import net.shibboleth.oidc.security.JWTDecryptionConfiguration;
import net.shibboleth.oidc.security.JWTEncryptionConfiguration;
import net.shibboleth.oidc.security.JWTSignatureSigningConfiguration;
+import net.shibboleth.oidc.security.JWTSignatureValidationConfiguration;
/**
- * Class extends SecurityConfiguration to support separate configuration for request object decryption and signature
- * validation.
+ * Class extends SecurityConfiguration to support separate configuration for various encryption and signature
+ * validation operations.
*/
-//TODO split packages?
+//TODO split packages for SignatureValidationConfiguration?
public class OIDCSecurityConfiguration extends SecurityConfiguration {
/** Configuration used when decrypting request object information. */
- //TODO Used by OP only? but should be decrypt config
+ //TODO Used by OP only? but should be JWT decrypt config
@Nullable
private EncryptionConfiguration requestObjectDecryptConfig;
@@ -59,27 +59,26 @@ public class OIDCSecurityConfiguration extends SecurityConfiguration {
/** Configuration used when validating id_token JWT signatures. */
@Nullable
- private net.shibboleth.oidc.security.SignatureValidationConfiguration<SignedJWT> idTokenJwtSignatureValidationConfig;
+ private JWTSignatureValidationConfiguration idTokenJwtSignatureValidationConfig;
/** Configuration used when decrypting id_tokens. */
@Nullable
- private net.shibboleth.oidc.security.JWTDecryptionConfiguration idTokenJwtDecryptConfig;
+ private JWTDecryptionConfiguration idTokenJwtDecryptConfig;
/** Configuration used when decrypting UserInfo tokens. */
@Nullable
- private net.shibboleth.oidc.security.JWTDecryptionConfiguration userInfoJwtDecryptConfig;
+ private JWTDecryptionConfiguration userInfoJwtDecryptConfig;
/** Configuration used when validating UserInfo JWT signatures. */
@Nullable
- private net.shibboleth.oidc.security.SignatureValidationConfiguration<SignedJWT> userInfoTokenJwtSignatureValidationConfig;
+ private JWTSignatureValidationConfiguration userInfoTokenJwtSignatureValidationConfig;
/**
* Set the configuration used to decrypt id_tokens.
*
* @param config configuration used when decrypting id_tokens, or null
*/
- public void setIdTokenJwtDecryptionConfiguration(@Nullable final
- net.shibboleth.oidc.security.JWTDecryptionConfiguration config) {
+ public void setIdTokenJwtDecryptionConfiguration(@Nullable final JWTDecryptionConfiguration config) {
idTokenJwtDecryptConfig = config;
}
@@ -88,7 +87,7 @@ public class OIDCSecurityConfiguration extends SecurityConfiguration {
*
* @return configuration used when decrypting id_tokens, or null
*/
- @Nullable public net.shibboleth.oidc.security.JWTDecryptionConfiguration getIdtokenJwtDecryptionConfiguration() {
+ @Nullable public JWTDecryptionConfiguration getIdtokenJwtDecryptionConfiguration() {
return idTokenJwtDecryptConfig;
}
@@ -97,8 +96,7 @@ public class OIDCSecurityConfiguration extends SecurityConfiguration {
*
* @param config configuration used when decrypting UserInfo JWTs, or null
*/
- public void setUserInfoJwtDecryptionConfiguration(@Nullable final
- net.shibboleth.oidc.security.JWTDecryptionConfiguration config) {
+ public void setUserInfoJwtDecryptionConfiguration(@Nullable final JWTDecryptionConfiguration config) {
userInfoJwtDecryptConfig = config;
}
@@ -125,7 +123,7 @@ public class OIDCSecurityConfiguration extends SecurityConfiguration {
*
* @return configuration used when decrypting UserInfo JWTs, or null
*/
- @Nullable public net.shibboleth.oidc.security.JWTDecryptionConfiguration getUserInfoJwtDecryptionConfiguration() {
+ @Nullable public JWTDecryptionConfiguration getUserInfoJwtDecryptionConfiguration() {
return userInfoJwtDecryptConfig;
}
@@ -212,8 +210,7 @@ public class OIDCSecurityConfiguration extends SecurityConfiguration {
* @return configuration used when validating id_token JWT signatures, or null
*/
@Nullable
- public net.shibboleth.oidc.security.SignatureValidationConfiguration<SignedJWT>
- getIdTokenJwtSignatureValidationConfiguration() {
+ public JWTSignatureValidationConfiguration getIdTokenJwtSignatureValidationConfiguration() {
return idTokenJwtSignatureValidationConfig;
}
@@ -223,7 +220,7 @@ public class OIDCSecurityConfiguration extends SecurityConfiguration {
* @param config configuration used when validating id_token JWT signatures, or null
*/
public void setIdTokenJwtSignatureValidationConfiguration(
- @Nullable final net.shibboleth.oidc.security.SignatureValidationConfiguration<SignedJWT> config) {
+ @Nullable final JWTSignatureValidationConfiguration config) {
idTokenJwtSignatureValidationConfig = config;
}
@@ -233,8 +230,7 @@ public class OIDCSecurityConfiguration extends SecurityConfiguration {
* @return configuration used when validating id_token JWT signatures, or null
*/
@Nullable
- public net.shibboleth.oidc.security.SignatureValidationConfiguration<SignedJWT>
- getUserInfoTokenJwtSignatureValidationConfiguration() {
+ public JWTSignatureValidationConfiguration getUserInfoTokenJwtSignatureValidationConfiguration() {
return userInfoTokenJwtSignatureValidationConfig;
}
@@ -244,7 +240,7 @@ public class OIDCSecurityConfiguration extends SecurityConfiguration {
* @param config configuration used when validating id_token JWT signatures, or null
*/
public void setUserInfoTokenJwtSignatureValidationConfiguration(
- @Nullable final net.shibboleth.oidc.security.SignatureValidationConfiguration<SignedJWT> config) {
+ @Nullable final JWTSignatureValidationConfiguration config) {
userInfoTokenJwtSignatureValidationConfig = config;
}
diff --git a/oidc-common-profile-impl/src/main/java/net/shibboleth/oidc/profile/audit/impl/AbstractClaimsSetAuditExtractor.java b/oidc-common-profile-impl/src/main/java/net/shibboleth/oidc/profile/audit/impl/AbstractClaimsSetAuditExtractor.java
index b39bc63..1c2a494 100644
--- a/oidc-common-profile-impl/src/main/java/net/shibboleth/oidc/profile/audit/impl/AbstractClaimsSetAuditExtractor.java
+++ b/oidc-common-profile-impl/src/main/java/net/shibboleth/oidc/profile/audit/impl/AbstractClaimsSetAuditExtractor.java
@@ -117,7 +117,7 @@ public abstract class AbstractClaimsSetAuditExtractor<T> extends AbstractInitial
/**
* Implemented to perform the actual lookup.
*
- * @param req authentication request to perform the lookup from.
+ * @param req authentication request to perform the lookup from
*
* @return lookup value or {@code null} if not found
*
diff --git a/oidc-common-profile-impl/src/main/java/net/shibboleth/oidc/profile/audit/impl/ClaimSetFromJWTLookupStrategy.java b/oidc-common-profile-impl/src/main/java/net/shibboleth/oidc/profile/audit/impl/ClaimSetFromJWTLookupStrategy.java
index 03d12ab..dea56c9 100644
--- a/oidc-common-profile-impl/src/main/java/net/shibboleth/oidc/profile/audit/impl/ClaimSetFromJWTLookupStrategy.java
+++ b/oidc-common-profile-impl/src/main/java/net/shibboleth/oidc/profile/audit/impl/ClaimSetFromJWTLookupStrategy.java
@@ -28,6 +28,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.nimbusds.jwt.JWT;
+import com.nimbusds.jwt.JWTClaimsSet;
import com.nimbusds.openid.connect.sdk.claims.ClaimsSet;
import net.shibboleth.utilities.java.support.annotation.ParameterName;
@@ -58,15 +59,19 @@ public class ClaimSetFromJWTLookupStrategy implements Function<ProfileRequestCon
@Override
@Nullable public ClaimsSet apply(@Nullable final ProfileRequestContext input) {
final JWT locatedJwt = jwtLookupStrategy.apply(input);
- if (locatedJwt != null) {
- try {
+ if (locatedJwt == null) {
+ return null;
+ }
+ try {
+ final JWTClaimsSet jwtClaims = locatedJwt.getJWTClaimsSet();
+ if (jwtClaims!= null) {
final ClaimsSet claims = new ClaimsSet();
- claims.putAll(locatedJwt.getJWTClaimsSet().toJSONObject());
- return claims;
- } catch (final ParseException e) {
- log.debug("Unable to parse JWT ClaimsSet from JWT",e);
- return null;
+ claims.putAll(jwtClaims.toJSONObject());
+ return claims;
}
+ } catch (final ParseException e) {
+ log.debug("Unable to parse JWT ClaimsSet from JWT",e);
+ return null;
}
return null;
}
diff --git a/oidc-common-profile-impl/src/main/java/net/shibboleth/oidc/profile/audit/impl/DateBasedJWTClaimAuditExtractor.java b/oidc-common-profile-impl/src/main/java/net/shibboleth/oidc/profile/audit/impl/DateBasedJWTClaimAuditExtractor.java
index 2b018e3..d8874c7 100644
--- a/oidc-common-profile-impl/src/main/java/net/shibboleth/oidc/profile/audit/impl/DateBasedJWTClaimAuditExtractor.java
+++ b/oidc-common-profile-impl/src/main/java/net/shibboleth/oidc/profile/audit/impl/DateBasedJWTClaimAuditExtractor.java
@@ -56,7 +56,7 @@ public class DateBasedJWTClaimAuditExtractor extends AbstractClaimsSetAuditExtra
public void setDateTimeFormat(@Nullable @NotEmpty final String format) {
ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
- if (format != null) {
+ if (StringSupport.trimOrNull(format) != null) {
dateTimeFormatter = DateTimeFormatter.ofPattern(StringSupport.trimOrNull(format));
}
}
diff --git a/oidc-common-profile-impl/src/main/java/net/shibboleth/oidc/profile/audit/impl/StringBasedJWTClaimAuditExtractor.java b/oidc-common-profile-impl/src/main/java/net/shibboleth/oidc/profile/audit/impl/StringBasedJWTClaimAuditExtractor.java
index b8b3b14..8f2f092 100644
--- a/oidc-common-profile-impl/src/main/java/net/shibboleth/oidc/profile/audit/impl/StringBasedJWTClaimAuditExtractor.java
+++ b/oidc-common-profile-impl/src/main/java/net/shibboleth/oidc/profile/audit/impl/StringBasedJWTClaimAuditExtractor.java
@@ -19,13 +19,15 @@ package net.shibboleth.oidc.profile.audit.impl;
import java.text.ParseException;
+import javax.annotation.Nullable;
+
import com.nimbusds.openid.connect.sdk.claims.ClaimsSet;
/** A JWT claim extractor function that returns String objects.*/
public class StringBasedJWTClaimAuditExtractor extends AbstractClaimsSetAuditExtractor<String> {
@Override
- protected String doLookup(final ClaimsSet claimsSet) throws ParseException {
+ @Nullable protected String doLookup(final ClaimsSet claimsSet) throws ParseException {
return claimsSet.getStringClaim(getClaimName());
}
}
diff --git a/oidc-common-profile-impl/src/main/java/net/shibboleth/oidc/profile/audit/impl/StringListBasedJWTClaimAuditExtractor.java b/oidc-common-profile-impl/src/main/java/net/shibboleth/oidc/profile/audit/impl/StringListBasedJWTClaimAuditExtractor.java
index ce7c79b..df51444 100644
--- a/oidc-common-profile-impl/src/main/java/net/shibboleth/oidc/profile/audit/impl/StringListBasedJWTClaimAuditExtractor.java
+++ b/oidc-common-profile-impl/src/main/java/net/shibboleth/oidc/profile/audit/impl/StringListBasedJWTClaimAuditExtractor.java
@@ -20,13 +20,15 @@ package net.shibboleth.oidc.profile.audit.impl;
import java.text.ParseException;
import java.util.List;
+import javax.annotation.Nullable;
+
import com.nimbusds.openid.connect.sdk.claims.ClaimsSet;
/** A JWT claim extractor function that returns lists of string objects.*/
public class StringListBasedJWTClaimAuditExtractor extends AbstractClaimsSetAuditExtractor<List<String>> {
@Override
- protected List<String> doLookup(final ClaimsSet claimsSet) throws ParseException {
+ @Nullable protected List<String> doLookup(final ClaimsSet claimsSet) throws ParseException {
return claimsSet.getStringListClaim(getClaimName());
}
}
diff --git a/oidc-common-profile-impl/src/main/java/net/shibboleth/oidc/profile/encoder/impl/HTTPPostAuthnRequestEncoder.java b/oidc-common-profile-impl/src/main/java/net/shibboleth/oidc/profile/encoder/impl/HTTPPostAuthnRequestEncoder.java
index 1485925..b1cd438 100644
--- a/oidc-common-profile-impl/src/main/java/net/shibboleth/oidc/profile/encoder/impl/HTTPPostAuthnRequestEncoder.java
+++ b/oidc-common-profile-impl/src/main/java/net/shibboleth/oidc/profile/encoder/impl/HTTPPostAuthnRequestEncoder.java
@@ -42,7 +42,6 @@ import net.shibboleth.utilities.java.support.collection.Pair;
import net.shibboleth.utilities.java.support.component.ComponentSupport;
import net.shibboleth.utilities.java.support.logic.Constraint;
import net.shibboleth.utilities.java.support.net.HttpServletSupport;
-import net.shibboleth.utilities.java.support.net.URISupport;
/**
* A {@link MessageEncoder message encoder} that encodes an OpenID authentication request by
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list