quarkusio/quarkus · error · ConfigurationException
configuration id '<key>' duplicates the default configuratio
Error message
configuration id '<key>' duplicates the default configuration id
What it means
Named (non-default) OIDC configurations must use a config key different from the default configuration's id. If a named config key equals the default id, Quarkus cannot disambiguate the two configurations and throws at startup.
Source
Thrown at extensions/oidc-common/runtime/src/main/java/io/quarkus/oidc/common/runtime/OidcCommonUtils.java:593
private static Map<String, Object> additionalClaims(Map<String, String> claims) {
return (Map) claims;
}
private static SignatureAlgorithm getSignatureAlgorithm(Credentials credentials, SignatureAlgorithm defaultAlgorithm) {
if (credentials.jwt().signatureAlgorithm().isPresent()) {
try {
return SignatureAlgorithm.fromAlgorithm(credentials.jwt().signatureAlgorithm().get());
} catch (Exception ex) {
throw new ConfigurationException("Unsupported signature algorithm");
}
} else {
return defaultAlgorithm;
}
}
public static void verifyConfigurationId(String defaultId, String configKey, Optional<String> configId) {
if (configKey.equals(defaultId)) {
throw new ConfigurationException("configuration id '" + configKey + "' duplicates the default configuration id");
}
if (configId.isPresent() && !configKey.equals(configId.get())) {
throw new ConfigurationException("Configuration has 2 different id values: '"
+ configKey + "' and '" + configId.get() + "'");
}
}
public static String initClientSecretBasicAuth(OidcClientCommonConfig oidcConfig, String clientSecret) {
if (clientSecret != null && isClientSecretBasicAuthRequired(oidcConfig.credentials())) {
return basicSchemeValue(oidcConfig.clientId().get(), clientSecret);
}
return null;
}
public static String basicSchemeValue(String name, String secret) {
return OidcConstants.BASIC_SCHEME + " "
+ Base64.getEncoder().encodeToString((name + ":" + secret).getBytes(StandardCharsets.UTF_8));View on GitHub (pinned to e1c734241f)
Solutions
- Rename the named config key so it differs from the default configuration id
- Or set quarkus.oidc.<key>.configuration-id... actually change the key: use a distinct key in the config path quarkus.oidc."<new-key>"
- Merge the named block into the default configuration if they are meant to be the same
Example fix
// before quarkus.oidc.auth-server-url=https://idp.example.com quarkus.oidc.myapp.configuration-id=myapp // 'myapp' key duplicates default id quarkus.oidc."myapp".auth-server-url=... // after quarkus.oidc.myapp.auth-server-url=https://idp.example.com quarkus.oidc."service-a".auth-server-url=...
Defensive patterns
Strategy: validation
Validate before calling
String defaultId = "<default-config-id>";
Set<String> namedKeys = Set.of("key1","key2"); // from config scanning
if (namedKeys.contains(defaultId)) throw new IllegalStateException("Named config key " + defaultId + " duplicates default id"); Prevention
- Keep named config keys unique and distinct from the default id
- After renaming the default id, grep config files for leftover named blocks using the old name
- Prefer descriptive, project-specific keys for named configs
When it happens
Trigger: A named config block (e.g. quarkus.oidc-client."<key>" or quarkus.oidc."<key>") whose <key> equals the default configuration's id passed to verifyConfigurationId.
Common situations: Renaming the default tenant/config id but leaving a named block keyed with the old default name; scaffolding tools generating named configs that collide with the default id.
Related errors
- Either 'quarkus.oidc-client.auth-server-url' or absolute 'qu
- The OIDC proxy configuration currently does not support the
- Configuration has 2 different id values: '<key>' and '<id>'
- The 'quarkus.hibernate-orm.mapping.format.global' configurat
- Annotation '%s' placed on '%s' specifies no 'acr' value
AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05).
Data as JSON: /api/errors/771560d1847148d9.
Report an issue: GitHub.