oidc: serve the registration confirmation page from a reloadable URL - #3448
oidc: serve the registration confirmation page from a reloadable URL#3448kradalby wants to merge 4 commits into
Conversation
cfe8f9d to
093c7f4
Compare
The interstitial was the body of /oidc/callback, the URL carrying the
single-use code, so any reload re-entered the spent exchange. Redirect to
GET /register/confirm/{auth_id}, also missing from the route table.
chi answered an unknown path or an unregistered method with an empty body, so a user who refreshed an auth page got a blank window.
093c7f4 to
f936aeb
Compare
|
The
This same check passed on this exact tree earlier today — the last push changed only commit message text, not a byte of code ( Proposed patch, same shape as -FROM golang:1.27.0-alpine AS build-env
+FROM golang:1.27.1-alpine AS build-envVerified locally: |
tailscale's go.mod now requires go >= 1.27.1, so the pinned 1.27.0 builders fail to build HEAD for both the client and derper images, taking the whole integration matrix with them.
5d8d81b to
7a38d6f
Compare
Interactive OIDC login failed whenever anything reloaded the confirmation page — Adblock Plus calling
window.location.reload(), the back button, pull-to-refresh — becauserenderRegistrationConfirmInterstitialwrote it as the body of/oidc/callback, the URL carrying the single-use code. One deployment measured completion falling from 100% to 61-73%.The callback now 303-redirects to
GET /register/confirm/{auth_id}, which was missing from the route table and answered a bare 405; the confirm cookie moves toSameSite=Laxto survive that redirect and is still required to render the page, so knowing the auth ID is not enough to confirm a registration.Dropped from the original branch: the
Sec-Fetch-Site: same-origin→ 204 short-circuit, redundant once nothing is parked on the callback and fatal when the IdP shares headscale's origin.Fixes #3365