{"record":{"id":"f02f492996483d7c","repo":"quarkusio/quarkus","slug":"sclient-id-property-must-be-configured","errorCode":null,"errorMessage":"'%sclient-id' property must be configured","messagePattern":"'(.+?)client-id' property must be configured","errorType":"validation","errorClass":"ConfigurationException","httpStatus":null,"severity":"error","filePath":"extensions/oidc-common/runtime/src/main/java/io/quarkus/oidc/common/runtime/OidcCommonUtils.java","lineNumber":170,"sourceCode":"        }\n        return maskedJson;\n    }\n\n    public static void verifyEndpointUrl(String endpointUrl) {\n        try {\n            // Verify that endpoint url is a valid URL\n            URI.create(endpointUrl).toURL();\n        } catch (Throwable ex) {\n            throw new ConfigurationException(\n                    String.format(\"'%s' is invalid\", endpointUrl), ex);\n        }\n    }\n\n    public static void verifyCommonConfiguration(OidcClientCommonConfig oidcConfig, boolean clientIdOptional,\n            boolean isServerConfig) {\n        final String configPrefix = isServerConfig ? \"quarkus.oidc.\" : \"quarkus.oidc-client.\";\n        if (!clientIdOptional && !oidcConfig.clientId().isPresent()) {\n            throw new ConfigurationException(\n                    String.format(\"'%sclient-id' property must be configured\", configPrefix));\n        }\n\n        Credentials creds = oidcConfig.credentials();\n        if (creds.secret().isPresent() && creds.clientSecret().value().isPresent()) {\n            throw new ConfigurationException(\n                    String.format(\n                            \"'%1$scredentials.secret' and '%1$scredentials.client-secret' properties are mutually exclusive\",\n                            configPrefix));\n        }\n        boolean clientSecretConfigured = creds.secret().isPresent()\n                || creds.clientSecret().value().isPresent()\n                || creds.clientSecret().provider().key().isPresent();\n        boolean jwtSecretConfigured = creds.jwt().secret().isPresent()\n                || creds.jwt().secretProvider().key().isPresent();\n\n        if (clientSecretConfigured && jwtSecretConfigured) {\n            throw new ConfigurationException(","sourceCodeStart":152,"sourceCodeEnd":188,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/oidc-common/runtime/src/main/java/io/quarkus/oidc/common/runtime/OidcCommonUtils.java#L152-L188","documentation":"verifyCommonConfiguration enforces that a client_id is configured whenever it is not optional. For OIDC web-app/service apps (prefix quarkus.oidc.) or OIDC clients (prefix quarkus.oidc-client.), a missing quarkus.<prefix>client-id property causes a ConfigurationException at startup. This is a fail-fast validation because most OIDC flows require identifying the client.","triggerScenarios":"Startup validation when oidcConfig.clientId() is empty and clientIdOptional=false — e.g. quarkus.oidc-client.* without quarkus.oidc-client.client-id set, or quarkus.oidc.* without quarkus.oidc.client-id where required.","commonSituations":"Freshly scaffolded apps where the client-id was never added; switching from anonymous/public access to confidential client flows; config profile (prod) that omits client-id.","solutions":["Add quarkus.oidc.client-id (or quarkus.oidc-client.client-id) to your configuration","If the client truly does not need an id (e.g. certain public clients), use the configuration path where clientIdOptional is honored","Check that the property is not excluded by an active config profile or build-time omission"],"exampleFix":"// before\nquarkus.oidc.auth-server-url=https://idp.example.com/realms/main\n// after\nquarkus.oidc.auth-server-url=https://idp.example.com/realms/main\nquarkus.oidc.client-id=my-app","handlingStrategy":"validation","validationCode":"if (!ConfigProvider.getConfig().getOptionalValue(\"quarkus.oidc.client-id\", String.class).isPresent()) {\n    throw new IllegalArgumentException(\"quarkus.oidc.client-id must be configured\");\n}","typeGuard":null,"tryCatchPattern":"try {\n    startApplication();\n} catch (ConfigurationException e) {\n    if (e.getMessage().contains(\"client-id\")) {\n        LOG.error(\"Set quarkus.oidc.client-id (or quarkus.oidc-client.client-id)\");\n    }\n}","preventionTips":["Include client-id in application templates and quickstart configs","Check all config profiles (dev/test/prod) define client-id","Document that OIDC generally requires client identification"],"tags":["configuration","oidc","missing-property"],"backgroundTag":"missing-required-config-property","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}