GitHub sign-in fails when the OAuth App has more than one redirect URI
Maintainer antworten meist innerhalb von 1 Tag
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Anfängerfreundlichkeit
- 55/100
- Issue-Typ
- Bug
- Klarheit
- Klar beschrieben
- Aktivitätsstatus
- Aktiv
- Tech-Stack
- github, rust
- Bereich
- authentication
Rechercherichtung
Read login_handler and callback_response in src/web/auth.rs, then trace how the OAuth redirect URI and state cookie are built and validated. Reproduce the flow with two registered callback URIs and compare the callback address with the sign-in origin. Done when sign-in returns to the originating address and the callback accepts its state.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Observed behavior
GitHub sign-in fails with {"error":"Login state is missing or expired."} when the server is reached at an address other than the first redirect URI registered on the OAuth App. With http://127.0.0.1:3000/api/callback registered first and a tunnel's https://<name>.trycloudflare.com/api/callback added second, signing in from the tunnel address failed this way. Signing in from the tunnel worked once the tunnel's callback was the only redirect URI on the app.
Expected behavior
Signing in returns to the address the sign-in started from, as long as that address's callback is registered on the OAuth App.
Reproduction
- Register a GitHub OAuth App with two redirect URIs,
http://127.0.0.1:3000/api/callbackfirst and a second origin's/api/callbackafter it. GitHub's OAuth App settings now accept up to ten. - Set
GITHUB_CLIENT_ID,GITHUB_CLIENT_SECRETandSESSION_SECRET, runcargo run -- web, and expose port 3000 on the second origin (I usedcloudflared tunnel --url http://127.0.0.1:3000). - Open
/peer-lobbyon the second origin and press Sign in with GitHub, then Authorize. - The page shows
{"error":"Login state is missing or expired."}.
CodeTrial version
codetrial 0.1.0 (5e00eab), built from source on Windows 11. The working tree had uncommitted changes in desktop/, src/config.rs, src/launch.rs and src/web/setup_edit.rs, none of them in the sign-in path.
Initial analysis
- Path:
login_handlerinsrc/web/auth.rs:127(at 5e00eab) builds the authorize URL as{oauth_base}/login/oauth/authorize?client_id=...&state=...&scope=...with noredirect_uri. The state cookie it sets belongs to the origin the request came in on. - Evidence: the authorize URL in the browser carried only
client_id,stateandscope. Withoutredirect_uri, GitHub redirects to the app's default callback, which for an app with several redirect URIs is the first one.callback_response(src/web/auth.rs:292) then runs on127.0.0.1, which never received the state cookie, and returns the 401 above. - Hypothesis: the redirect landed on
http://127.0.0.1:3000/api/callback. I did not capture the address bar after the failure; repeating step 3 and reading it would confirm or refute this.
Two directions, not yet compared against the code: send redirect_uri built from the request's origin, which needs the Host the server already accepts through CODETRIAL_ALLOWED_HOSTS and the proxy settings; or keep the single-callback design and say in the docs and in the error that the app must have exactly one redirect URI, for the origin users sign in from.
Sanitized evidence
{"error":"Login state is missing or expired."}
- I removed credentials, session tokens, candidate recordings, and personal interview content from this public report.
- Vorherrschende Sprache
- Rust
- Sterne
- 228
- Forks
- 150
- Ø Merge
- 1 T. 3 Std.
- Gemergte PRs (30 T.)
- 230
Entwicklungsumgebung
- Kein Dockerfile und keine Docker-Compose-Datei
- Hat eine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus sysprog21/codetrial
-
Schwierigkeit 1/5 1-3 Stunden Anfängerfreundlichkeit 88/100
sysprog21/codetrial#646 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
sysprog21/codetrial#645 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
Show recorded scores in past attempt rowsEvtl. vergeben @liehcheng hat das vor 3 Tagen übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
sysprog21/codetrial#604 · 4 Kommentare · 1 zugewiesene Person ·
Maintainer antworten meist innerhalb von 1 Tag
-
Calibration can pass invalid assessability dataEvtl. vergeben @Jonathas2127 hat das heute übernommen. Offen
sysprog21/codetrial#649 · 1 zugewiesene Person ·
Maintainer antworten meist innerhalb von 1 Tag
-
A failed GitHub sign-in shows only a JSON errorEvtl. vergeben @Ray891220 hat das heute übernommen. Offen
sysprog21/codetrial#644 · 2 Kommentare · 1 zugewiesene Person ·
Maintainer antworten meist innerhalb von 1 Tag
Alle Issues in sysprog21/codetrial
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 88/100
software-mansion/pathfinder#3620 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 88/100
Maintainer antworten meist innerhalb von 1 Tag
-
bug priority: low
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 90/100
storytold/wordcraft#6211 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 2 Tagen
-
backlog multiple issues priority: low
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
storytold/pdfcraft#6911 · 2 Kommentare ·
Maintainer antworten meist innerhalb von 2 Tagen
-
DGNIMPORT: "The DGN model has nothing that can be imported" when the first element streams are emptyOffen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
HakanSeven12/OpenCADStudio#2820 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag