Skip to content

⚙️ [기능추가][인증] OAuth 및 JWT 인증 시스템 구현 및 적용 필요 #271

@Cassiiopeia

Description

@Cassiiopeia

📝현재 문제점

  • 현재 SecurityConfiganyRequest().permitAll() 상태로 인증이 전혀 없음
  • MemberControllerGET /api/members/mememberUuid를 쿼리 파라미터로 직접 받아 인증 없이 동작
  • 익명 회원(createAnonymous) 방식으로만 가입 가능하며 소셜 로그인 연동이 없음
  • 관리자 페이지(/admin/**) 권한 분리가 인프라 레벨에만 의존

🛠️해결 방안 / 제안 기능

  • 프론트에서 Firebase SDK로 소셜 로그인 후 받은 idToken을 백엔드로 전달
  • Firebase Admin SDK(verifyIdToken())로 idToken 검증 후 자체 JWT 발급
  • 5개 OAuth provider 지원
    • Firebase 기반 (Google, Apple): FirebaseLoginStrategy 추상 클래스 상속
    • REST API 직접 검증 (Kakao, Naver, Github): 각 provider 별 전략 구현
  • JwtAuthenticationFilter를 Spring Security Filter Chain에 등록
  • AccessToken(1h) + RefreshToken(14d) 이중 토큰 구조, RefreshToken은 Redis 저장
  • MemberRole(USER/ADMIN/SUPER_ADMIN) 기반 경로별 권한 분리
  • 모든 보호 API의 memberUuid 쿼리 파라미터를 @AuthMember 토큰 기반으로 전환
  • 익명 회원(createAnonymous) 및 POST /api/members/register 삭제 (하드리셋)

⚙️작업 내용

  • FirebaseConfig.java — FirebaseApp, FirebaseAuth Bean 등록 (PQL-Web/config)
  • SecurityConfig.java — JwtAuthenticationFilter 등록, 경로별 권한 설정
  • JwtAuthenticationFilter.java — Security Filter Chain (PQL-Common/security)
  • LoginMember.java — SecurityContext 객체 (UUID 기반)
  • LoginMemberArgumentResolver.java@AuthMemberLoginMember 주입
  • JwtTokenProvider.java — AccessToken/RefreshToken 발급 및 검증
  • AuthService.java — 로그인/재발급/로그아웃 비즈니스 로직
  • AuthController.javaPOST /api/auth/{login, reissue, logout}
  • SocialLoginStrategy 전략 패턴 5개 구현 (Google, Apple, Kakao, Naver, Github)
  • RefreshTokenRepository.java — Redis refresh_token:{memberUuid} 저장소
  • Member.signUp() 팩토리 메서드 추가, createAnonymous() 삭제
  • ErrorCode — Auth 관련 에러 코드 8개 추가
  • application-dev.yml, application-prod.yml — jwt, firebase 설정 추가
  • Flyway 마이그레이션 — ANONYMOUS 데이터 정리
  • 설계 문서: docs/superpowers/specs/2026-04-18-auth-design.md

🙋‍♂️담당자

Metadata

Metadata

Assignees

Labels

작업완료작업 완료 상태인 경우 (이슈 폐쇄)

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions