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

  1. Rename the named config key so it differs from the default configuration id
  2. Or set quarkus.oidc.<key>.configuration-id... actually change the key: use a distinct key in the config path quarkus.oidc."<new-key>"
  3. 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

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


AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05). Data as JSON: /api/errors/771560d1847148d9. Report an issue: GitHub.