Repository navigation
fix(auth): app logout ends inline sessions, never blocks, and keeps ID tokens out of URLs - #523
Open
PiquelChips wants to merge 1 commit into
Open
PiquelChips wants to merge 1 commit into
PiquelChips wants to merge 1 commit into
Conversation
|
Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 26 minutes. View limit details
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. |
PiquelChips
force-pushed
the
fix/logout
branch
from
November 13, 2026 22:30
53d1ccd to
9f4be31
Compare
- /oidc/logout, by query or form, answers the page confirming the request itself, whose form posts the parameters back to /logout, validated again there, so an ID token never sits in a page's address. Confirming also ends the session the id_token_hint's sid names when it is the hinted account's, such as an app's inline passkey sign-in, which has no cookie at auth. - A hint auth can't verify is ignored rather than refusing the logout: the request names no client and the browser stays on auth. The page says so, and says when the hint names another account than the browser's. - Both SDKs' logout builds a LogoutRequest the browser posts as a form, its page() for server apps, and the browser client posts its own. - Back-channel logout URIs get their own type: HTTPS, and a public address when the host is an IP. Deleted clients receive no logout tokens. Closes #280
PiquelChips
force-pushed
the
fix/logout
branch
from
November 13, 2026 23:13
9f4be31 to
054cece
Compare
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.
An app's logout could leave the user signed in, or not work at all. A passkey sign-in on the app's own page has no cookie at auth, so RP-initiated logout ended nothing and the session lived on for 30 days. An
id_token_hintauth couldn't verify refused the whole logout as JSON. The ID token sat in the logout page's URL, and both SDKs put it there. Back-channel URIs that auth can never reach, likehttp://127.0.0.1, registered, and deleted apps still received logout tokens.Now:
sidnames, if it's the hinted account's./oidc/logout, by query or form, now answers the confirmation page itself instead of redirecting to/logoutwith every parameter in the address. The page carries the request as hidden form fields, posts them to/logout, and auth validates them again there, so nothing is stored between the two steps. Both SDKs replacelogout_url/logoutUrlwithlogout(...), aLogoutRequestthe browser posts as a form:page()for server apps (the login routes now answer with it), and the browser client posts it itself./logoutwith no parameters still signs out of auth itself, from the settings or the dashboard.BackchannelLogoutUri: HTTPS, and a public address when the host is an IP. The CLI, console and dashboard all validate through it. Deleted clients are left out of logout deliveries.Tests cover each case: the confirmation page by query and by cross-site form, the inline session, the unverifiable hint, the other account's hint, the deleted client, the URI rules (doc tests), and both SDKs' posted requests. The OIDC reference, SDK guides, app settings and architecture docs describe the new flow.
I didn't add a shared SDK vector for the logout request: building one needs a validated ID token in each SDK's runner, so each SDK has a unit test of the posted fields instead.
Stacked on #522.
Closes #280
Note
Written by Claude Opus 5.5 in Claude Code (via T3 Code)