Errors

What each one means and what to do about it.

At the authorization request

ErrorCauseWhat to do
invalid_redirect_urithe redirect URI does not match the registered one character for charactercheck scheme, port, path and trailing slash
invalid_clientunknown client_id, or the client is suspendedcheck the identifier and the client's state in the console
invalid_requesta required parameter is missing — usually code_challengeenable PKCE
not_in_organizationthe application is restricted to an organization's membersthe user needs an address in its domain, or to join

A redirect URI error is not returned to your site; it is shown on our page. Otherwise we would be sending data to an unverified address — exactly what the check exists to prevent.

At code exchange

ErrorCause
invalid_grantthe code expired (10 minutes), was already exchanged, or belongs to another client
invalid_clientwrong secret
invalid_requestcode_verifier was not sent

Re-exchanging a code is never supported: an honest client has no reason to exchange one code twice, and a dishonest one does.

At refresh

ErrorCause
invalid_grantthe token chain was revoked, the session ended, or the user blocked your site

The response is always the same: send the user to sign in again. If their auth.my session is alive they come straight back without noticing.

Careful

Do not retry refresh in a loop. Presenting a retired refresh token more than 30 seconds after its legitimate use counts as theft and revokes the whole chain. See Tokens.

On the library side

MessageCause
unsupported algorithmthe library was configured by hand for a different algorithm; remove the setting and let it read discovery
id_token issuer mismatchthe configured issuer has a trailing slash or different case; it is exactly https://auth.my
state mismatchyour application did not keep state between requests — typical with several instances and no shared session store
origin not alloweda browser request from an origin that is not among the redirect URIs

None of the above

Send us the client_id, the time of the request to the minute, and the exact error text. Those show what happened on our side; without them, nothing does.

Did this page help?