[java-oidfed-common] 02/03: Improve content checking for entity configuration and signed keysets before publishing
Codeberg
noreply at shibboleth.net
Fri Oct 9 05:38:48 UTC 2026
This is an automated email from the git hooks/post-receive script.
codeberg pushed a commit to branch main
in repository java-oidfed-common.
View the commit online:
https://codeberg.org/Shibboleth/java-oidfed-common/commit/f17c3cc6fa300ea9c471e1f295f359675106411d
commit f17c3cc6fa300ea9c471e1f295f359675106411d
Author: Henri Mikkonen <henri.mikkonen at iki.fi>
AuthorDate: Fri Oct 9 08:19:40 2026 +0300
Improve content checking for entity configuration and signed keysets before publishing
- Verify that jwks-claim has content
- Sub/iss match for entity configuration
---
.../profile/impl/AbstractBuildEntityStatementAction.java | 11 +++++++++++
.../oidfed/profile/impl/BuildEntityConfiguration.java | 12 ++++++++++--
.../impl/InitializeEntityStatementContextForKeyset.java | 12 +++++++++++-
3 files changed, 32 insertions(+), 3 deletions(-)
diff --git a/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/profile/impl/AbstractBuildEntityStatementAction.java b/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/profile/impl/AbstractBuildEntityStatementAction.java
index d9f98fb..1b90f93 100644
--- a/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/profile/impl/AbstractBuildEntityStatementAction.java
+++ b/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/profile/impl/AbstractBuildEntityStatementAction.java
@@ -48,6 +48,7 @@ import net.shibboleth.shared.component.ComponentInitializationException;
import net.shibboleth.shared.logic.Constraint;
import net.shibboleth.shared.logic.FunctionSupport;
import net.shibboleth.shared.primitive.LoggerFactory;
+import net.shibboleth.shared.primitive.StringSupport;
import net.shibboleth.shared.security.IdentifierGenerationStrategy;
import net.shibboleth.shared.security.impl.SecureRandomIdentifierGenerationStrategy;
@@ -223,7 +224,17 @@ public abstract class AbstractBuildEntityStatementAction extends AbstractProfile
protected void doExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
final String issuer = issuerLookupStrategy.apply(profileRequestContext);
+ if (StringSupport.trimOrNull(issuer) == null) {
+ log.error("{} Could not resolve issuer value", getLogPrefix());
+ ActionSupport.buildEvent(profileRequestContext, EventIds.INVALID_PROFILE_CTX);
+ return;
+ }
final String subject = subjectLookupStrategy.apply(profileRequestContext);
+ if (StringSupport.trimOrNull(subject) == null) {
+ log.error("{} Could not resolve subject value", getLogPrefix());
+ ActionSupport.buildEvent(profileRequestContext, EventIds.INVALID_PROFILE_CTX);
+ return;
+ }
final Instant now = Instant.now();
diff --git a/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/profile/impl/BuildEntityConfiguration.java b/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/profile/impl/BuildEntityConfiguration.java
index ad6b778..bff0569 100644
--- a/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/profile/impl/BuildEntityConfiguration.java
+++ b/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/profile/impl/BuildEntityConfiguration.java
@@ -171,14 +171,22 @@ public class BuildEntityConfiguration extends AbstractBuildEntityStatementAction
final JWK jwk = CredentialConversionUtil.credentialToKey(credential);
if (jwk != null) {
jwks.add(jwk);
- log.debug("{} Included {} to the keyset", getLogPrefix(), jwk.toJSONString());
+ log.debug("{} Included {} to the entity configuration keyset", getLogPrefix(), jwk.toJSONString());
+ } else {
+ log.warn("{} Could not convert the credential {} (type {}) into a JWK", getLogPrefix(),
+ credential.getKeyNames(), credential.getCredentialType());
}
}
}
+ if (jwks.isEmpty()) {
+ log.error("{} No credentials to publish resolved for entity configuration", getLogPrefix());
+ ActionSupport.buildEvent(profileRequestContext, IdPEventIds.INVALID_PROFILE_CONFIG);
+ return false;
+ }
final Duration lifetime = entityConfigurationLifetimeLookupStrategy.apply(profileRequestContext);
if (lifetime == null) {
- log.error("{} No lifetime supplied for entity statement", getLogPrefix());
+ log.error("{} No lifetime supplied for entity configuration", getLogPrefix());
ActionSupport.buildEvent(profileRequestContext, IdPEventIds.INVALID_PROFILE_CONFIG);
return false;
}
diff --git a/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/profile/impl/InitializeEntityStatementContextForKeyset.java b/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/profile/impl/InitializeEntityStatementContextForKeyset.java
index 22e49e7..ebc6241 100644
--- a/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/profile/impl/InitializeEntityStatementContextForKeyset.java
+++ b/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/profile/impl/InitializeEntityStatementContextForKeyset.java
@@ -16,6 +16,7 @@ package net.shibboleth.oidfed.profile.impl;
import java.util.Collections;
import java.util.List;
+import java.util.Objects;
import java.util.function.Function;
import javax.annotation.Nonnull;
@@ -28,6 +29,7 @@ import org.opensaml.security.config.SecurityConfiguration;
import org.opensaml.security.credential.Credential;
import org.slf4j.Logger;
+import com.nimbusds.jose.jwk.JWK;
import com.nimbusds.jose.jwk.JWKSet;
import net.shibboleth.idp.profile.AbstractProfileAction;
@@ -181,7 +183,15 @@ public class InitializeEntityStatementContextForKeyset extends AbstractProfileAc
}
final JWKSet jwks = new JWKSet(credentialsToPublish.stream()
- .map(credential -> CredentialConversionUtil.credentialToKey(credential))
+ .map(credential -> {
+ final JWK jwk = CredentialConversionUtil.credentialToKey(credential);
+ if (jwk == null) {
+ log.warn("{} Could not convert the credential {} (type {}) into a JWK", getLogPrefix(),
+ credential.getKeyNames(), credential.getCredentialType());
+ }
+ return jwk;
+ })
+ .filter(Objects::nonNull)
.toList());
log.trace("{} Resolved jwks to set in the content: {}", getLogPrefix(), jwks);
entityStatementCtx.setKeys(jwks);
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list