Repository navigation
feat(oidc): per-application PKCE and nonce opt-outs for confidential clients - #540
Merged
Bccorb merged 3 commits intoNov 1, 2026
Merged
Conversation
…-opt-out # Conflicts: # src/services/oidcApplicationService.ts
Bccorb
marked this pull request as ready for review
November 1, 2026 01:26
Bccorb
added a commit
that referenced
this pull request
Nov 1, 2026
…clients (#540) * feat(oidc): let a confidential application opt out of PKCE * feat(oidc): per-application nonce requirement for clients without PKCE --------- Co-authored-by: Brandon Corbett <Bccorb@users.noreply.github.com>
Bccorb
added a commit
that referenced
this pull request
Nov 1, 2026
…clients (#540) * feat(oidc): let a confidential application opt out of PKCE * feat(oidc): per-application nonce requirement for clients without PKCE --------- Co-authored-by: Brandon Corbett <Bccorb@users.noreply.github.com>
Bccorb
added a commit
that referenced
this pull request
Nov 1, 2026
…clients (#540) * feat(oidc): let a confidential application opt out of PKCE * feat(oidc): per-application nonce requirement for clients without PKCE --------- Co-authored-by: Brandon Corbett <Bccorb@users.noreply.github.com>
Bccorb
added a commit
that referenced
this pull request
Nov 1, 2026
…ts (#539) * feat(oidc): send per-application token lifetimes to the provider service * feat(oidc): per-application PKCE and nonce opt-outs for confidential clients (#540) * feat(oidc): let a confidential application opt out of PKCE * feat(oidc): per-application nonce requirement for clients without PKCE --------- Co-authored-by: Brandon Corbett <Bccorb@users.noreply.github.com> --------- Co-authored-by: Brandon Corbett <Bccorb@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Per-application PKCE and nonce opt-outs for OpenID Provider applications (epic #387). Stacked on #539. Uses
@seamless-auth/types0.34.0-next.4 (fells-code/seamless-auth-types#141 adds the fields).What changed
oidc_clientsgainspkceRequiredandnonceRequired, bothDEFAULT true NOT NULL, so every existing application keeps PKCE.POSTandPATCH /admin/applicationsaccept both.pkceRequired: falseis allowed only on a confidential client, andnonceRequired: falseonly oncepkceRequiredisfalse. The merged result of a patch is checked again, so turning PKCE back on while the nonce is waived is refused. Both writes already sit behind admin write and step-up.admin_oidc_application_pkce_updatedandadmin_oidc_application_nonce_updated, on create whenfalseand on any patch that changes the value.GET /oidc/clients/:idsendsurn:seamless:pkce_required: falsefor an opted-out confidential client, plusurn:seamless:nonce_required: falsewhen the nonce is waived too.stateand client authentication against code injection.Checks (against types 0.34.0-next.4)
npm run typecheck,npm run lint,npm run format:check: cleannpm run coverage: 2741 passed, lines 99.23, branches 95.77invalid_request("nonce is required when PKCE is not used"); with the nonce also waived, neither works; an application that has not opted out still needs PKCE.