GitHub sign-in fails when the OAuth App has more than one redirect URI
Mantenedores costumam responder em até 1 dia
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 3/5
- Tempo estimado
- 1-2 dias
- Facilidade para iniciantes
- 55/100
- Tipo de issue
- Bug
- Clareza
- Claramente especificada
- Status de atividade
- Ativa
- Stack de tecnologia
- github, rust
- Domínio
- authentication
Direção de pesquisa
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.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
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.
- Linguagem predominante
- Rust
- Estrelas
- 228
- Forks
- 150
- Merge médio
- 1d 3h
- PRs com merge (30d)
- 230
Preparar o ambiente
- Sem Dockerfile nem arquivo Docker Compose
- Tem um modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de sysprog21/codetrial
-
Dificuldade 1/5 1-3 horas Facilidade para iniciantes 88/100
sysprog21/codetrial#646 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
sysprog21/codetrial#645 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
Show recorded scores in past attempt rowsTalvez já em andamento @liehcheng assumiu há 3 dias. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
sysprog21/codetrial#604 · 4 comentários · 1 responsável ·
Mantenedores costumam responder em até 1 dia
-
Calibration can pass invalid assessability dataTalvez já em andamento @Jonathas2127 assumiu hoje. Aberta
sysprog21/codetrial#649 · 1 responsável ·
Mantenedores costumam responder em até 1 dia
-
A failed GitHub sign-in shows only a JSON errorTalvez já em andamento @Ray891220 assumiu hoje. Aberta
sysprog21/codetrial#644 · 2 comentários · 1 responsável ·
Mantenedores costumam responder em até 1 dia
Todas as issues de sysprog21/codetrial
Issues semelhantes
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 88/100
software-mansion/pathfinder#3620 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 88/100
Mantenedores costumam responder em até 1 dia
-
bug priority: low
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 90/100
storytold/wordcraft#6211 · 1 comentário ·
Mantenedores costumam responder em até 2 dias
-
backlog multiple issues priority: low
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
storytold/pdfcraft#6911 · 2 comentários ·
Mantenedores costumam responder em até 2 dias
-
DGNIMPORT: "The DGN model has nothing that can be imported" when the first element streams are emptyAberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
HakanSeven12/OpenCADStudio#2820 · 1 comentário ·
Mantenedores costumam responder em até 1 dia