GitHub sign-in fails when the OAuth App has more than one redirect URI
Maintainer thường phản hồi trong vòng 1 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 3/5
- Thời gian dự kiến
- 1-2 ngày
- Mức phù hợp với người mới
- 55/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Công nghệ
- github, rust
- Lĩnh vực
- authentication
Hướng nghiên cứu
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.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
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.
- Ngôn ngữ chính
- Rust
- Star
- 228
- Fork
- 150
- Merge trung bình
- 1 ngày 3 giờ
- Pull request đã merge (30 ngày)
- 230
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của sysprog21/codetrial
-
Độ khó 1/5 1-3 giờ Mức phù hợp với người mới 88/100
sysprog21/codetrial#646 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
sysprog21/codetrial#645 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Show recorded scores in past attempt rowsCó thể đã có người làm @liehcheng đã nhận 3 ngày trước. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
sysprog21/codetrial#604 · 4 bình luận · 1 người được giao ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Calibration can pass invalid assessability dataCó thể đã có người làm @Jonathas2127 đã nhận hôm nay. Đang mở
sysprog21/codetrial#649 · 1 người được giao ·
Maintainer thường phản hồi trong vòng 1 ngày
-
A failed GitHub sign-in shows only a JSON errorCó thể đã có người làm @Ray891220 đã nhận hôm nay. Đang mở
sysprog21/codetrial#644 · 2 bình luận · 1 người được giao ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của sysprog21/codetrial
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
software-mansion/pathfinder#3620 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
Maintainer thường phản hồi trong vòng 1 ngày
-
bug priority: low
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 90/100
storytold/wordcraft#6211 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 2 ngày
-
backlog multiple issues priority: low
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
storytold/pdfcraft#6911 · 2 bình luận ·
Maintainer thường phản hồi trong vòng 2 ngày
-
DGNIMPORT: "The DGN model has nothing that can be imported" when the first element streams are emptyĐang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
HakanSeven12/OpenCADStudio#2820 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày