quarkusio/quarkus · error · OidcClientRegistrationException
Registered OIDC Client can not make requests to the client c
Error message
Registered OIDC Client can not make requests to the client configuration endpoint
What it means
A registered client can only manage itself at the registration (client configuration) endpoint if the server returned a registration_client_uri. When registrationClientUri is null, checkClientRequestUri() throws OidcClientRegistrationException before read/update/delete proceed, because there is no endpoint to send the management request to.
Source
Thrown at extensions/oidc-client-registration/runtime/src/main/java/io/quarkus/oidc/client/registration/runtime/RegisteredClientImpl.java:228
LOG.debug("Client has been successfully deleted");
} else {
String errorMessage = buffer.toString();
LOG.debugf("Client delete request has failed: status: %d, error message: %s", resp.statusCode(),
errorMessage);
}
})
.replaceWithVoid();
}
private void checkClosed() {
if (closed) {
throw new IllegalStateException("Registered OIDC Client is closed");
}
}
private void checkClientRequestUri() {
if (registrationClientUri == null) {
throw new OidcClientRegistrationException(
"Registered OIDC Client can not make requests to the client configuration endpoint");
}
}
@Override
public String registrationUri() {
return this.registrationClientUri;
}
@Override
public String registrationToken() {
return this.registrationToken;
}
}
View on GitHub (pinned to e1c734241f)
Solutions
- Use an OIDC provider that supports the client configuration endpoint and returns registration_client_uri
- Avoid read/update/delete for such clients; only use the initial registration result
- Check registrationUri() / registration response before attempting management calls and handle absence gracefully
Example fix
// before
registeredClient.delete(); // throws if no registration_client_uri
// after
if (registeredClient.registrationUri() != null) {
registeredClient.delete();
} else {
LOG.warn("Client configuration endpoint not available; skipping delete");
} Defensive patterns
Strategy: validation
Validate before calling
if (registeredClient.registrationUri() == null) {
// skip read/update/delete
return;
} Type guard
boolean supportsManagement(RegisteredClient c) {
return c.registrationUri() != null;
} Try / catch
try {
registeredClient.update(metadata);
} catch (OidcClientRegistrationException e) {
LOG.warn("Client configuration endpoint unavailable: " + e.getMessage());
} Prevention
- Verify the provider returns registration_client_uri before relying on management APIs
- Guard read/update/delete behind a registrationUri null-check
- Test against your real OIDC provider, not only an in-memory stub
When it happens
Trigger: Calling read(), update(), or delete() on a RegisteredClient whose registration response contained no registration_client_uri — typically when the provider issued the client without management capabilities.
Common situations: OIDC providers that support registration but not the management endpoint; tests using providers that omit registration_client_uri; misconfigured issuer that returns minimal registration metadata.
Related errors
- Client id can not be modified
- Client secret can not be modified
- Failed to generate key id
- Application 'web-app' type is only supported if access token
- Failed to parse the realm name.
AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05).
Data as JSON: /api/errors/4f895da0289aea90.
Report an issue: GitHub.