{"record":{"id":"47f46e43cbddab16","repo":"quarkusio/quarkus","slug":"openid-connect-provider-client-registration-endpoi","errorCode":null,"errorMessage":"OpenId Connect Provider client registration endpoint URL is not configured and can not be discovered","messagePattern":"OpenId Connect Provider client registration endpoint URL is not configured and can not be discovered","errorType":"validation","errorClass":"ConfigurationException","httpStatus":null,"severity":"error","filePath":"extensions/oidc-client-registration/runtime/src/main/java/io/quarkus/oidc/client/registration/runtime/OidcClientRegistrationRecorder.java","lineNumber":164,"sourceCode":"                                OidcCommonUtils.getOidcEndpointUrl(authServerUriString, oidcConfig.registrationPath())));\n            } else {\n                clientRegConfigUni = discoverRegistrationUri(client, oidcRequestFilters, oidcResponseFilters,\n                        authServerUriString, vertx, oidcConfig);\n            }\n        }\n        return clientRegConfigUni.onItemOrFailure()\n                .transformToUni(new BiFunction<OidcConfigurationMetadata, Throwable, Uni<? extends OidcClientRegistration>>() {\n\n                    @Override\n                    public Uni<OidcClientRegistration> apply(OidcConfigurationMetadata metadata, Throwable t) {\n                        if (t != null) {\n                            client.close();\n                            throw toOidcClientRegException(getEndpointUrl(oidcConfig), t);\n                        }\n\n                        if (metadata.clientRegistrationUri == null) {\n                            client.close();\n                            throw new ConfigurationException(\n                                    \"OpenId Connect Provider client registration endpoint URL is not configured and can not be discovered\");\n                        }\n\n                        final long connectionDelayInMillisecs = OidcCommonUtils.getConnectionDelayInMillis(oidcConfig);\n\n                        ClientMetadata clientMetadata = OidcClientRegistrationImpl.createMetadata(oidcConfig.metadata());\n                        if (!oidcConfig.registerEarly()) {\n                            LOG.debugf(\"%s client registration is delayed\",\n                                    oidcConfig.id().orElse(DEFAULT_ID));\n                            return Uni.createFrom().item(new OidcClientRegistrationImpl(client,\n                                    connectionDelayInMillisecs,\n                                    metadata.clientRegistrationUri,\n                                    oidcConfig,\n                                    null,\n                                    oidcRequestFilters,\n                                    oidcResponseFilters));\n                        } else if (clientMetadata.getJsonObject().isEmpty()) {\n                            LOG.debugf(\"%s client registration is skipped because its metadata is not configured\",","sourceCodeStart":146,"sourceCodeEnd":182,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/oidc-client-registration/runtime/src/main/java/io/quarkus/oidc/client/registration/runtime/OidcClientRegistrationRecorder.java#L146-L182","documentation":"During startup the recorder fetches the provider's OIDC discovery metadata to find the client registration endpoint (clientRegistrationUri). If discovery succeeded (or returned no usable metadata) but the registration URI is still null, it throws a ConfigurationException because registration can neither be discovered nor was it explicitly configured. The client is closed before throwing.","triggerScenarios":"auth-server-url is set and discovery returns a document without registration_endpoint, and no absolute quarkus.oidc-client-registration...registration-path is configured.","commonSituations":"Identity providers that don't implement RFC 7591 dynamic client registration (no registration_endpoint in their discovery document), an issuer URL pointing to the wrong realm, or an IDP behind a proxy stripping discovery fields.","solutions":["Set quarkus.oidc-client-registration...registration-path to the provider's explicit registration endpoint URL","Verify the auth-server-url points to the correct realm/issuer whose discovery document includes registration_endpoint","Confirm the provider supports dynamic client registration (RFC 7591); otherwise register clients out-of-band"],"exampleFix":"# before\nquarkus.oidc-client-registration.auth-server-url=https://idp.example.com  # no registration_endpoint\n# after\nquarkus.oidc-client-registration.registration-path=https://idp.example.com/oidc/register","handlingStrategy":"validation","validationCode":"// Verify the provider advertises dynamic registration before enabling it\nvar doc = Json.decodeValue(DiscoveryClient.discover(authServerUrl + \"/.well-known/openid-configuration\"));\nif (doc.getJsonObject(\"registration_endpoint\") == null) {\n    // set registration-path explicitly instead of relying on discovery\n}","typeGuard":"null","tryCatchPattern":"try {\n    reg = clientRegistration.await().indefinitely();\n} catch (ConfigurationException e) {\n    LOG.errorf(\"Cannot discover registration endpoint: %s — set registration-path explicitly\", e.getMessage());\n}","preventionTips":["Check discovery output with curl before configuring dynamic registration","Set registration-path explicitly for providers without RFC 7591","Verify realm/issuer URLs point at the right tenant"],"tags":["oidc","discovery","configuration","startup"],"backgroundTag":"discovery-endpoint-not-found","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-12T22:17:10.623Z"}