Skip to content

Omit client_secret for public OAuth clients in token exchange - #13

Open
carlosplanchon wants to merge 1 commit into
benavlabs:mainfrom
carlosplanchon:fix/public-client-token-exchange
Open

Omit client_secret for public OAuth clients in token exchange#13
carlosplanchon wants to merge 1 commit into
benavlabs:mainfrom
carlosplanchon:fix/public-client-token-exchange

Conversation

@carlosplanchon

Copy link
Copy Markdown

exchange_code always sent client_secret; for a public client (PKCE-only, token_endpoint_auth_method=none) that means sending client_secret="", which several IdPs reject. Now included only when set. PKCE is the public client's proof and is sent either way. Confidential clients unchanged; tests cover both modes. Found while integrating a self-hosted OIDC provider (Zitadel).

AbstractOAuthProvider.exchange_code always included client_secret in the
token request body. For a public client (PKCE-only,
token_endpoint_auth_method=none) client_secret is empty, so the request
sent client_secret="", which several IdPs reject since a public client
must not send client authentication. Include the field only when it is
set; the PKCE code_verifier, sent either way, is the public client's proof.

Confidential clients are unchanged. Adds test_token_exchange.py capturing
the token POST body for both the confidential and public modes.

Signed-off-by: Carlos Andrés Planchón Prestes <carlosandresplanchonprestes@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant