Skip to content

fix(server): Last.fm 콜백을 https로 — 승인 후 돌아오지 못하던 것 - #35

Merged
countnine merged 1 commit into
masterfrom
fix/server/lastfm-callback-scheme
Aug 17, 2026
Merged

fix(server): Last.fm 콜백을 https로 — 승인 후 돌아오지 못하던 것#35
countnine merged 1 commit into
masterfrom
fix/server/lastfm-callback-scheme

Conversation

@countnine

Copy link
Copy Markdown
Owner

PR #34로 넣은 Last.fm 계정 연결이 실제로 눌러 보니 승인 후 돌아오지 못했다(브라우저가 "oracle.oryx-skink.ts.net 서버에 연결할 수 없습니다").

원인

tailscale serve가 HTTPS를 종단하고 앱에는 평문 HTTP로 넘기므로 req.Schemehttp다. 그대로 콜백을 만들었더니 운영에서 이렇게 나갔다:

cb=http%3A%2F%2Foracle.oryx-skink.ts.net%2Fadmin%2Flastfm%2Fcallback

그 호스트의 80번 포트에는 아무도 없다(tailscale serve는 443만 연다). 설령 붙었더라도 state 논스 쿠키가 Secure라 평문 요청에는 실리지 않아 어차피 실패한다.

로컬 스모크 테스트가 이걸 놓쳤다127.0.0.1이라 http가 정답이었고, 그래서 잘못된 값이 정상으로 보였다.

고침

X-Forwarded-Proto를 먼저 믿고, 없으면 루프백이 아닌 이상 https로 본다. 관리자 쿠키가 이미 Secure라 이 화면 전체가 애초에 HTTPS를 전제로 하므로 일관된 규칙이다. 로컬 개발(127.0.0.1·localhost)만 http로 남는다.

프록시가 여럿이면 X-Forwarded-Proto"https, http"처럼 이어 붙으므로 맨 앞을 쓴다.

검증

  • 빌드 경고 0, 테스트 336개 통과(3건 추가 — 프록시 뒤/헤더 있음/로컬 각각 고정).
  • 배포 후 /admin/lastfm/connectLocation에서 cb=https%3A%2F%2F…를 확인하고, 실제로 승인까지 돌려 볼 것.

🤖 Generated with Claude Code

`tailscale serve`가 HTTPS를 종단하고 앱에는 평문 HTTP로 넘기므로 req.Scheme이
http다. 그대로 콜백을 만들었더니 실측에서 이렇게 나갔다:

  cb=http://oracle.oryx-skink.ts.net/admin/lastfm/callback

그 호스트의 80번에는 아무도 없어서 승인 후 브라우저가 "서버에 연결할 수
없습니다"로 끝난다. 설령 붙었더라도 state 논스 쿠키가 Secure라 평문으로는
실리지 않아 어차피 실패한다.

X-Forwarded-Proto를 먼저 믿고, 없으면 루프백이 아닌 이상 https로 본다 —
관리자 쿠키가 이미 Secure라 이 화면 전체가 애초에 HTTPS를 전제로 한다.
로컬 개발(127.0.0.1)만 http로 남는다.

로컬 스모크는 127.0.0.1이라 이 버그가 드러나지 않았다. 테스트로 고정한다.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@countnine
countnine merged commit e488dd7 into master Aug 17, 2026
1 of 2 checks passed
@countnine
countnine deleted the fix/server/lastfm-callback-scheme branch August 17, 2026 14:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant