[java-oidc-common] 01/03: Add ClientInformationCriterion to the criteria set if client information was found.
Henri Mikkonen
henri.mikkonen at iki.fi
Tue Mar 28 13:37:24 UTC 2023
This is an automated email from the git hooks/post-receive script.
hjmikkon pushed a commit to branch main
in repository java-oidc-common.
View the commit online:
http://git.shibboleth.net/view/?p=java-oidc-common.git;a=commit;h=064099c40f44442b54f8a35b4db05d72e7c554ac
commit 064099c40f44442b54f8a35b4db05d72e7c554ac
Author: Henri Mikkonen <henri.mikkonen at iki.fi>
AuthorDate: Tue Mar 28 16:30:07 2023 +0300
Add ClientInformationCriterion to the criteria set if client information was found.
The criteria set is used as input for DecryptionParametersResolver.
---
.../impl/PopulateJWTDecryptionParameters.java | 38 ++++++++++++++++++++--
1 file changed, 35 insertions(+), 3 deletions(-)
diff --git a/oidc-common-profile-impl/src/main/java/net/shibboleth/oidc/profile/impl/PopulateJWTDecryptionParameters.java b/oidc-common-profile-impl/src/main/java/net/shibboleth/oidc/profile/impl/PopulateJWTDecryptionParameters.java
index 956c331..6c08ddf 100644
--- a/oidc-common-profile-impl/src/main/java/net/shibboleth/oidc/profile/impl/PopulateJWTDecryptionParameters.java
+++ b/oidc-common-profile-impl/src/main/java/net/shibboleth/oidc/profile/impl/PopulateJWTDecryptionParameters.java
@@ -21,6 +21,7 @@ import java.util.List;
import java.util.function.Function;
import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
import org.opensaml.messaging.context.navigate.ChildContextLookup;
import org.opensaml.profile.action.ActionSupport;
@@ -32,6 +33,7 @@ import org.slf4j.LoggerFactory;
import net.shibboleth.idp.profile.AbstractProfileAction;
import net.shibboleth.idp.profile.context.RelyingPartyContext;
+import net.shibboleth.oidc.metadata.context.OIDCMetadataContext;
import net.shibboleth.oidc.profile.config.OIDCAuthorizationConfiguration;
import net.shibboleth.oidc.security.credential.ClientSecretCredential;
import net.shibboleth.oidc.security.jose.DecryptionConfiguration;
@@ -39,6 +41,7 @@ import net.shibboleth.oidc.security.jose.DecryptionParameters;
import net.shibboleth.oidc.security.jose.DecryptionParametersResolver;
import net.shibboleth.oidc.security.jose.EncryptionConfiguration;
import net.shibboleth.oidc.security.jose.context.SecurityParametersContext;
+import net.shibboleth.oidc.security.jose.criterion.ClientInformationCriterion;
import net.shibboleth.oidc.security.jose.criterion.ClientSecretCredentialCriterion;
import net.shibboleth.oidc.security.jose.criterion.DecryptionConfigurationCriterion;
import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
@@ -74,6 +77,9 @@ public class PopulateJWTDecryptionParameters extends AbstractProfileAction {
@NonnullAfterInit
private Function<ProfileRequestContext,List<DecryptionConfiguration>> configurationLookupStrategy;
+ /** Strategy used to look up a OIDC client metadata context. */
+ @Nullable private Function<ProfileRequestContext, OIDCMetadataContext> oidcClientMetadataContextLookupStrategy;
+
/** Lookup function for relying party context. */
@Nonnull private Function<ProfileRequestContext,RelyingPartyContext> relyingPartyContextLookupStrategy;
@@ -87,7 +93,9 @@ public class PopulateJWTDecryptionParameters extends AbstractProfileAction {
// Create context by default.
securityParametersContextLookupStrategy =
new ChildContextLookup<>(SecurityParametersContext.class, true).compose(
- new InboundMessageContextLookup());
+ new InboundMessageContextLookup());
+ oidcClientMetadataContextLookupStrategy = new ChildContextLookup<>(OIDCMetadataContext.class).compose(
+ new InboundMessageContextLookup());
relyingPartyContextLookupStrategy = new ChildContextLookup<>(RelyingPartyContext.class);
}
@@ -140,7 +148,19 @@ public class PopulateJWTDecryptionParameters extends AbstractProfileAction {
securityParametersContextLookupStrategy = Constraint.isNotNull(strategy,
"SecurityParametersContext lookup strategy cannot be null");
}
-
+
+ /**
+ * Set lookup strategy for {@link OIDCMetadataContext} for input to resolution.
+ *
+ * @param strategy lookup strategy
+ */
+ public void setClientMetadataContextLookupStrategy(
+ @Nullable final Function<ProfileRequestContext, OIDCMetadataContext> strategy) {
+ ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+
+ oidcClientMetadataContextLookupStrategy = strategy;
+ }
+
/** {@inheritDoc} */
@Override
protected void doInitialize() throws ComponentInitializationException {
@@ -201,7 +221,19 @@ public class PopulateJWTDecryptionParameters extends AbstractProfileAction {
final CriteriaSet criteria = new CriteriaSet();
criteria.add(new DecryptionConfigurationCriterion(configs));
-
+
+ // Add client metadata criterion
+ final OIDCMetadataContext oidcMetadataCtx =
+ oidcClientMetadataContextLookupStrategy.apply(profileRequestContext);
+ if (oidcMetadataCtx != null && oidcMetadataCtx.getClientInformation() != null) {
+ log.debug(
+ "{} Adding OIDC client information to resolution criteria for encryption algorithms",
+ getLogPrefix());
+ criteria.add(new ClientInformationCriterion(oidcMetadataCtx.getClientInformation()));
+ } else {
+ log.debug("{} No OIDC client information available", getLogPrefix());
+ }
+
// Build a client secret credential criteria. Extract the decryption credential from the RP config.
final RelyingPartyContext rpCtx = relyingPartyContextLookupStrategy.apply(profileRequestContext);
if (rpCtx != null && rpCtx.getConfiguration() != null &&
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list