{"record":{"id":"39c4c1cabf71d194","repo":"quarkusio/quarkus","slug":"either-quarkus-oidc-client-auth-server-url-or-ab","errorCode":null,"errorMessage":"Either 'quarkus.oidc-client.auth-server-url' or absolute 'quarkus.oidc-client.token-path' URL must be set","messagePattern":"Either 'quarkus\\.oidc-client\\.auth-server-url' or absolute 'quarkus\\.oidc-client\\.token-path' URL must be set","errorType":"validation","errorClass":"ConfigurationException","httpStatus":null,"severity":"error","filePath":"extensions/oidc-client/runtime/src/main/java/io/quarkus/oidc/client/runtime/OidcClientRecorder.java","lineNumber":101,"sourceCode":"    }\n\n    protected static Uni<OidcClient> createOidcClientUni(OidcClientConfig oidcConfig, String oidcClientId,\n            Vertx vertx, OidcTlsSupport tlsSupport, ProxyConfigurationRegistry proxyConfigurationRegistry) {\n        if (!oidcConfig.clientEnabled()) {\n            String message = String.format(\"'%s' client configuration is disabled\", oidcClientId);\n            LOG.debug(message);\n            return Uni.createFrom().item(new DisabledOidcClient(message));\n        }\n        if (oidcConfig.id().isEmpty()) {\n            // if user did not set the client id\n            // we do set 'id' to the named client key\n            // e.g. quarkus.oidc-client.<<name>>.id=<<name>>\n            return Uni.createFrom().failure(new IllegalStateException(\"OIDC Client ID must be set\"));\n        }\n\n        try {\n            if (oidcConfig.authServerUrl().isEmpty() && !OidcCommonUtils.isAbsoluteUrl(oidcConfig.tokenPath())) {\n                throw new ConfigurationException(\n                        \"Either 'quarkus.oidc-client.auth-server-url' or absolute 'quarkus.oidc-client.token-path' URL must be set\");\n            }\n            OidcCommonUtils.verifyEndpointUrl(getEndpointUrl(oidcConfig));\n        } catch (Throwable t) {\n            LOG.debug(t.getMessage());\n            String message = String.format(\"'%s' client configuration is not initialized\", oidcClientId);\n            return Uni.createFrom().item(new DisabledOidcClient(message));\n        }\n\n        try {\n            OidcCommonUtils.verifyCommonConfiguration(oidcConfig, false, false);\n            OidcCommonUtils.validateCredentialsForAllEndpoints(oidcConfig.credentials());\n        } catch (ConfigurationException e) {\n            return Uni.createFrom().failure(e);\n        }\n\n        var mutinyVertx = new io.vertx.mutiny.core.Vertx(vertx);\n        OidcWebClient client = OidcWebClient.create(oidcConfig, tlsSupport, mutinyVertx, proxyConfigurationRegistry,","sourceCodeStart":83,"sourceCodeEnd":119,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/oidc-client/runtime/src/main/java/io/quarkus/oidc/client/runtime/OidcClientRecorder.java#L83-L119","documentation":"At build/record time OidcClientRecorder.createOidcClientUni validates that the client can locate a token endpoint: either quarkus.oidc-client.auth-server-url is set (so the token path can be derived/discovered) or token-path is an absolute URL. Otherwise a ConfigurationException is recorded and the client is marked uninitialized, failing at first use.","triggerScenarios":"Producing an OIDC client bean with neither quarkus.oidc-client.auth-server-url nor an absolute quarkus.oidc-client.token-path configured — typical for named clients (quarkus.oidc-client.<name>.auth-server-url) whose config block is missing.","commonSituations":"Adding a named OIDC client via @OidcClient(\"name\") without the corresponding quarkus.oidc-client.\"name\".auth-server-url property; typos in the config key; running in a profile that drops the config block.","solutions":["Set quarkus.oidc-client.auth-server-url (or quarkus.oidc-client.<name>.auth-server-url for named clients)","Or set an absolute quarkus.oidc-client.token-path URL","Check the exact config key/named-client name matches the @OidcClient annotation value","Verify active config profile includes these properties"],"exampleFix":"# before\n# quarkus.oidc-client.\"my-client\".auth-server-url missing\n\n# after\nquarkus.oidc-client.\"my-client\".auth-server-url=http://localhost:8180/realms/test","handlingStrategy":"validation","validationCode":"if (config.authServerUrl().isEmpty() && !isAbsoluteUrl(config.tokenPath())) {\n    throw new IllegalArgumentException(\"Set quarkus.oidc-client.auth-server-url or absolute token-path\");\n}","typeGuard":"boolean isClientUrlConfigured(OidcClientConfig c) {\n    return c.authServerUrl().isPresent() || isAbsoluteUrl(c.tokenPath());\n}","tryCatchPattern":"try { return oidcClient.getTokens().await().indefinitely(); } catch (RuntimeException e) { if (e.getMessage() != null && e.getMessage().contains(\"client configuration is not initialized\")) { throw new IllegalStateException(\"Check quarkus.oidc-client.auth-server-url / token-path\", e); } throw e; }","preventionTips":["Add a startup assertion that all named clients have auth-server-url","Keep named-client config keys matching @OidcClient values exactly","Check per-profile config (e.g. %prod.) coverage"],"tags":["oidc","config","startup"],"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"}