invalid_client
Docs version v1 (main)Nauthera is pre-1.0, in a design-partner program
Client authentication failed at an endpoint that authenticates the client (RFC 6749 §5.2).
Meaning
Sent with 401 and a WWW-Authenticate: Basic challenge by /token, /introspect,
/revoke, /par and /device_authorization. The causes are an unknown client_id, a
missing or wrong secret, a credential of another method than the one registered, a secret
for a client that has none, and a private_key_jwt assertion that fails a check (its
algorithm, kid, signature, iss/sub, aud, exp or lifetime, a reused jti, or a
key set that cannot be fetched or holds a private key, whether it is published at a
jwks_uri or registered by value as jwks). A public client calling
/introspect, and an /introspect or /revoke request with no body, get it too.
The answer and its description are the same for every cause, so it never says whether
the client exists.
Impact
Every request the client makes with that credential fails. Users can still sign in at the server, but the application cannot redeem the code, so they end on the application's own error after signing in. Usually a misconfiguration: a mistyped or rotated secret, the wrong authentication method, or a key set the server cannot read.
Diagnosis
- The response does not say which rule refused the credential; the audit record does.
Find
oauth.by the request'sclient_ authentication. attempted X-Request-IDon the dashboard's Troubleshooting page, or filter the Audit log by client. - Its cause names the rule:
client_unknown,secret_missing,secret_mismatch,secret_not_registered,auth_method_mismatch,auth_method_unsupported,confidential_,client_ required jwks_fetch_failed,jwks_, or one of theprivate_ key_ published assertion_*causes. - Compare
token_in the client's registration (the dashboard's client page, orendpoint_ auth_ method spec.on itstokenEndpointAuthMethod OIDCClient).
Mitigation
- As a client developer: authenticate with the registered method and only that one. For
private_key_jwt, setissandsubto the client id, use a freshjtiand a shortexpfor each request, and sign with a key yourjwks_uripublishes or your registeredjwksholds. - As an operator: if the secret was lost, issue a new one (for an
OIDCClient, delete its Secret and the operator rotates it). Ajwks_cause means the client's signing key is public: treat it as compromised and have the owner replace it.private_ key_ published - As a user: nothing to do on your side; tell the application's owner.
Escalation
A run of refusals for one client from unfamiliar addresses is someone guessing a secret; handle it as a security incident. If a credential that should verify is refused with a cause that does not fit, open an issue with the request id, the server version and the recorded cause. Never attach the secret or the assertion.
OAuth error runbooks · Generated from internal/ in nauthera-server.