Skip to content

[Auth] 관리자 Google 로그인을 signInWithIdToken 기반 직접 로그인으로 전환 #213

Description

@soohyunme

배경

관리자 로그인은 현재 supabase.auth.signInWithOAuth({ provider: "google" }) redirect 흐름을 사용한다. 이 방식은 Supabase Auth 기본 도메인을 거치기 때문에 Google 계정 선택 화면에서 uhqoiyyziajwxjecziis.supabase.co(으)로 이동처럼 Supabase 프로젝트 도메인이 노출된다.

참가자 로그인은 이미 Google Identity Services 버튼으로 credential을 받은 뒤 supabase.auth.signInWithIdToken({ provider: "google" })을 호출하는 방식이다. 이 방식은 Google 로그인 화면에서 서비스 맥락을 유지하면서도 최종적으로 Supabase session/JWT를 발급받는다.

관리자 로그인도 참가자 로그인과 같은 Google Identity Services + Supabase signInWithIdToken 흐름으로 전환한다.

결정 사항

  • Supabase Pro/custom domain은 이번 해결책으로 사용하지 않는다.
  • 관리자 로그인에서 Supabase OAuth redirect 흐름을 제거한다.
  • 관리자 로그인도 참가자 로그인처럼 Google Identity Services 버튼을 사용한다.
  • Google credential을 Supabase signInWithIdToken에 전달해 Supabase session/JWT는 유지한다.
  • 백엔드가 Google ID token을 직접 검증하거나 자체 auth token을 새로 발급하는 방식은 이번 범위가 아니다.

현재 구조

  • 참가자 로그인: GoogleSignInButton -> supabase.auth.signInWithIdToken() -> ensureBingoGoogleBridge()
  • 관리자 로그인: supabase.auth.signInWithOAuth() -> Supabase OAuth redirect -> Google -> Supabase callback -> admin session 확인

변경 방향

  • 관리자 로그인 화면에서 기존 handleGoogleLoginsignInWithOAuth 호출을 제거한다.
  • frontend/src/modules/Auth/GoogleSignInButton.tsx를 관리자 로그인에서도 재사용한다.
  • Google credential/nonce를 받아 supabase.auth.signInWithIdToken({ provider: "google", token: credential, nonce })를 호출한다.
  • 발급된 Supabase session access token으로 기존 getAdminMe()를 호출한다.
  • 성공 시 기존처럼 setAdminSession() 후 관리자 콘솔로 이동한다.
  • 실패 시 Supabase sign out 및 기존 admin session 정리를 유지한다.

영향 범위

  • frontend/src/modules/Admin/AdminPortal.tsx
  • frontend/src/modules/Auth/GoogleSignInButton.tsx 재사용 여부 확인
  • admin login 관련 테스트/e2e
  • Supabase Google provider 설정은 계속 필요
  • VITE_GOOGLE_CLIENT_ID, VITE_SUPABASE_URL, VITE_SUPABASE_ANON_KEY 설정은 계속 필요

수용 기준

  • 관리자 로그인에서 Google 계정 선택 화면에 Supabase 프로젝트 도메인이 앱 이름처럼 노출되지 않는다.
  • 관리자 로그인도 참가자 로그인과 같은 Google Identity Services UI를 사용한다.
  • 로그인 성공 시 기존과 동일하게 Supabase session/JWT가 생성된다.
  • 기존 /api/admin/auth/me 기반 관리자 권한 확인 흐름이 유지된다.
  • 승인된 관리자 이메일은 로그인 후 관리자 콘솔로 이동한다.
  • 권한이 없는 Google 계정은 관리자 콘솔에 접근하지 못하고 명확한 오류를 본다.
  • 로그아웃, 세션 복구, 로그인 실패 처리 동작이 기존과 동일하게 유지된다.

참고

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2낮은 우선순위 (Nice-to-have)enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions