GoTrue's OAuth server does not honour the standard OIDC prompt parameter
(OIDC Core 1.0 §3.1.2.1). As a consequence, when the signed-in user already has
a grant covering the requested scopes, GET /oauth/authorizations/{authorization_id}
does two things at once:
{ "redirect_url": "...?code=..." }, andclient, no
user, no scope.Because both happen inside a single unparameterised GET, a custom authorization UI configured for GoTrue's OAuth server cannot present the "you are signed in as X, continue?" step that Google, Microsoft and Okta show on a repeat authorization. There is no point at which the code has not yet been issued and the client is still known.
First authorization (no grant yet) — full details:
{
"authorization_id": "...",
"redirect_uri": "...",
"client": { "id": "...", "name": "..." },
"user": { "id": "...", "email": "..." },
"scope": "openid profile"
}
Repeat authorization (grant exists, same scopes) — a destination only:
{ "redirect_url": "https://.../callback?code=..." }
The second shape carries no client identifier, so the UI cannot look up which application is asking, cannot name it on screen, and cannot offer "use a different account" against it. The code in that URL is already valid, so any confirmation rendered afterwards is cosmetic — the authorization has happened.
This same GET also binds the authorization to the currently signed-in user.
Signing out and returning with the original authorization_id therefore fails
on a user mismatch, which is why an account switch cannot simply resume the
request it started from.
A. Honour prompt on the authorize request.
prompt=consent, return the full authorization details and defer code
issuance until an explicit approve or deny action.prompt=select_account, keep the authorization unbound until the user
has selected an account, or provide a supported way to preserve and resume the
original authorization request across an account switch.prompt=none, complete silently only when an authenticated session and
sufficient prior consent already exist; otherwise return the corresponding
OIDC interaction error (login_required, consent_required, or
account_selection_required).B. Include client details alongside redirect_url.
Less complete — the code is still issued up front, so a "cancel" button would be untruthful — but it would at least let the screen name the application and the account.
(A) is preferable: it makes the confirmation step meaningful rather than
decorative, and prompt is already the standard mechanism relying parties use
to request exactly this.
GOTRUE_OAUTH_SERVER_ENABLED=true) and register a
confidential client with openid profile.GET /oauth/authorizations/{authorization_id} returns the redirect_url
shape. No request parameter changes this.On a shared device, or for anyone holding more than one account, a repeat sign-in currently completes with no indication of which account was used and no way to switch. The relying party cannot compensate: it never sees the authorization server's session, and the only workaround available to the user is to visit the account site manually and sign out before returning.
GOTRUE_OAUTH_SERVER_ENABLED=true, hosted Supabaseopenid profileThe user reports that GoTrue's OAuth server does not support the OIDC prompt parameter, causing issues with repeat authorizations. When a user already has a grant, the server issues an authorization code without providing client or user details, preventing a proper account confirmation step. The user suggests improvements to honor the prompt parameter and include client details in responses.