[java-oidc-common] branch main updated: Feed ClientInformation to the criteria set if found via lookup function.
Henri Mikkonen
henri.mikkonen at iki.fi
Thu Jan 5 13:31:20 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=f0523fc68cf72aeb5c1472eab4a9b5964983286e
The following commit(s) were added to refs/heads/main by this push:
new f0523fc Feed ClientInformation to the criteria set if found via lookup function.
f0523fc is described below
commit f0523fc68cf72aeb5c1472eab4a9b5964983286e
Author: Henri Mikkonen <henri.mikkonen at iki.fi>
AuthorDate: Thu Jan 5 15:31:10 2023 +0200
Feed ClientInformation to the criteria set if found via lookup function.
---
.../impl/BaseJWTSignatureSecurityHandler.java | 43 ++++++++++++++++++++--
1 file changed, 39 insertions(+), 4 deletions(-)
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 d5cfe32..3e71d87 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
@@ -27,6 +27,7 @@ import org.opensaml.messaging.context.navigate.ChildContextLookup;
import org.opensaml.messaging.handler.MessageHandlerException;
import org.opensaml.profile.context.ProfileRequestContext;
import org.opensaml.profile.context.navigate.ParentProfileRequestContextLookup;
+import org.opensaml.security.credential.Credential;
import org.opensaml.security.credential.UsageType;
import org.opensaml.security.criteria.UsageCriterion;
import org.opensaml.security.messaging.impl.BaseTrustEngineSecurityHandler;
@@ -36,10 +37,12 @@ import org.slf4j.LoggerFactory;
import com.nimbusds.jwt.SignedJWT;
import com.nimbusds.openid.connect.sdk.op.OIDCProviderMetadata;
+import com.nimbusds.openid.connect.sdk.rp.OIDCClientInformation;
import net.shibboleth.idp.profile.context.RelyingPartyContext;
import net.shibboleth.oidc.profile.config.OIDCAuthorizationConfiguration;
import net.shibboleth.oidc.security.context.JWTSecurityParametersContext;
+import net.shibboleth.oidc.security.criterion.ClientInformationCriterion;
import net.shibboleth.oidc.security.criterion.ProviderMetadataCriterion;
import net.shibboleth.oidc.security.criterion.StaticCredentialCriterion;
import net.shibboleth.utilities.java.support.component.ComponentSupport;
@@ -65,7 +68,13 @@ public abstract class BaseJWTSignatureSecurityHandler extends BaseTrustEngineSec
* if not used.
*/
@Nonnull private Function<MessageContext, OIDCProviderMetadata> providerMetadataLookupStrategy;
-
+
+ /**
+ * Function that looks up client information from the given message context. Can return {@literal null}
+ * if not used.
+ */
+ @Nonnull private Function<MessageContext, OIDCClientInformation> clientInformationLookupStrategy;
+
/** Lookup function for relying party context. */
@Nonnull private Function<ProfileRequestContext,RelyingPartyContext> relyingPartyContextLookupStrategy;
@@ -75,9 +84,13 @@ public abstract class BaseJWTSignatureSecurityHandler extends BaseTrustEngineSec
/** The provider metadata found from the lookup strategy.*/
@Nullable private OIDCProviderMetadata providerMetadata;
+ /** The client information found from the lookup strategy. */
+ @Nullable private OIDCClientInformation clientInformation;
+
/** Constructor.*/
protected BaseJWTSignatureSecurityHandler() {
providerMetadataLookupStrategy = FunctionSupport.constant(null);
+ clientInformationLookupStrategy = FunctionSupport.constant(null);
relyingPartyContextLookupStrategy = new ChildContextLookup<>(RelyingPartyContext.class);
}
@@ -94,7 +107,20 @@ public abstract class BaseJWTSignatureSecurityHandler extends BaseTrustEngineSec
Constraint.isNotNull(strategy,"Provider metadata lookup strategy can not be null");
}
-
+
+ /**
+ * Set the lookup strategy to locate the client information.
+ *
+ * @param strategy the strategy.
+ */
+ public void setClientInformationLookupStrategy(
+ @Nonnull final Function<MessageContext, OIDCClientInformation> strategy) {
+ ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+
+ clientInformationLookupStrategy =
+ Constraint.isNotNull(strategy, "Client information lookup strategy can not be null");
+ }
+
/**
* Set lookup strategy for relying party context.
*
@@ -126,6 +152,7 @@ public abstract class BaseJWTSignatureSecurityHandler extends BaseTrustEngineSec
return false;
}
providerMetadata = providerMetadataLookupStrategy.apply(messageContext);
+ clientInformation = clientInformationLookupStrategy.apply(messageContext);
final RelyingPartyContext rpCtx = adapt(relyingPartyContextLookupStrategy).apply(messageContext);
if (rpCtx != null && rpCtx.getConfiguration() != null &&
@@ -146,9 +173,17 @@ public abstract class BaseJWTSignatureSecurityHandler extends BaseTrustEngineSec
criteriaSet.add(new ProviderMetadataCriterion(providerMetadata));
}
+ if (clientInformation != null) {
+ criteriaSet.add(new ClientInformationCriterion(clientInformation));
+ }
+
if (profileConfiguration != null) {
- criteriaSet.add(new StaticCredentialCriterion(
- profileConfiguration.getClientCredential(PRC_LOOKUP.apply(messageContext))));
+ final Credential credential = profileConfiguration.getClientCredential(PRC_LOOKUP.apply(messageContext));
+ if (credential != null) {
+ criteriaSet.add(new StaticCredentialCriterion(credential));
+ } else {
+ log.trace("{} No credential found from the profile configuration", getLogPrefix());
+ }
}
criteriaSet.add( new UsageCriterion(UsageType.SIGNING) );
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list