invalid_request
Docs version v1 (main)Nauthera is pre-1.0, in a design-partner program
The request lacks a parameter, combines parameters wrongly or breaks a rule checked before any grant is evaluated (RFC 6749 §4.1.2.1, §5.2).
Meaning
Sent by /authorize, /par, /token and /device_authorization. In this server:
/token: nogrant_type; nocode,refresh_tokenordevice_codefor the grant; a code with a PKCE challenge redeemed withoutcode_verifier; a malformed Basic header, more than one client authentication method, a bodyclient_idthat differs from the Basic one, or aclient_assertionwithout its type or of an unsupported type./authorize, redirected to the client: a plain request from a client registered to require a signed request object, aresponse_modeother thanquery(other thanfragmentfor an implicit request), no PKCE challenge where the client or organization requires one, or a method other thanS256; aclaimsparameter that is not a JSON object of claim requests; and for an implicit request, nononce, noopenidscope, or adpop_jkt. An implicit request's error is in the redirect's fragment./authorize, answered directly: an unknownclient_id, aredirect_urithat is not registered (or missing while the client has several), a front-channel request where PAR is required, arequest_urithat is unknown, spent or another client's, or a request object that does not verify. All of these answer onlyinvalid_requestandiss, so an unregistered client and a wrong redirect look the same./par: arequest_uriin the push, aclient_idother than the authenticated client, or any rule/authorizeapplies.
Impact
Nearly always an integration bug or a registration that does not match the app: the
same request fails the same way every time. A redirected error reaches the app's
callback, and what the user sees there is up to the app. A direct /authorize refusal
never returns to the app: the user is left on the server, and a browser on the main
organization sees an error page showing a Reference ID.
Diagnosis
- Read
error_description; it names the rule everywhere except on a direct/authorizerefusal. - Paste the response's
X-Request-ID(or the Reference ID the user saw) into the admin dashboard's Troubleshooting page. See Tracing a failed request. - The audit action is
oauth.(authorization. requested /authorize,/par),oauth.token.issuedoroauth.token.refreshed(/token),oauth.device.requested, oroauth.for a malformed client credential. A direct refusal is recorded under the rule as its reason (client_ authentication. attempted unregistered_client,redirect_uri_required,invalid_redirect_uri,pushed_request_required,invalid_request_uri,request_,uri_ client_ mismatch invalid_request_object); elsewhere the reason isinvalid_requestand the cause names the rule (parameter_missing,pkce_required,pkce_method_unsupported,response_,mode_ unsupported dpop_jkt_without_code,claims_malformed,signed_request_required,multiple_auth_methods, …). - Compare the request with the client's registration on the dashboard's client page or
its
OIDCClientresource: redirect URIs are matched exactly.
Mitigation
- As a client developer: fix what the description or the recorded cause names. Send one
client authentication method, the
redirect_uriexactly as registered, and anS256PKCE challenge. - As an operator: for a direct refusal of a registered app, compare its
redirect_uriwith the registration character by character (scheme, port, path, trailing slash). Withfapi.on, every client must userequire_ pushed_ authorization_ requests /par. - As a user: go back to the application and start again; if it repeats, give the application's support the Reference ID.
Escalation
If the recorded rule is one the request did not break, or a request accepted before an
upgrade is refused after it, open an issue with the request id, the server version
(nauthera-server version), the endpoint and the reason and cause from the audit record.
Never attach codes, tokens, secrets, request objects or client assertions.
OAuth error runbooks · Generated from internal/ in nauthera-server.