Skip to content

KConnect OAuth 로그인 구현 #82

Description

@tnals0924

어떤 기능인가요?

KConnect(국민대 학생용 OAuth)로 로그인한다. 앱·웹이 PKCE 로그인으로 받은 { code, codeVerifier, redirectUri }를 서버에 보내면, 서버가 토큰을 교환하고 K-계정 API로 사용자를 확인한 뒤 회원을 찾거나 만들어 서비스 JWT를 발급한다.

  • provider별 로직은 전략 인터페이스 OAuthClient로 분리한다. 요청 경로의 {provider}로 구현체를 고르므로 나중에 구글·카카오를 KConnect와 함께 붙일 수 있다.
  • provider 계정과 회원의 연결은 auth 도메인의 oauth_accounts 테이블이 가진다. member 도메인은 OAuth를 모른다.
  • 로그인 응답의 termsAgreementRequired는 member_term_agreements 상태로 매번 판단한다. 가입 후 약관에 동의하지 않고 이탈했다가 다시 로그인한 경우도 처리된다.

📝 작업 상세 내용

  • auth 도메인 골격: OAuthProvider·OAuthLoginCommand·OAuthUserInfo·OAuthErrorCode, 전략 OAuthClient, OAuthService.authenticate, OAuthClientRegistry
  • OAuth 계정 연결: OAuthAccount·OAuthAccountRepository, Flyway oauth_accounts, JPA Entity·RepositoryImpl
  • member 가입·프로필 갱신·학번 조회·필수 약관 동의 여부 조회
  • infrastructure:client KConnect 구현체: 토큰 교환(타임아웃·에러 매핑), 사용자 정보 조회
  • gateway:auth 토큰 발급 파사드 AuthTokenIssuer, 로그인 경로 permitAll
  • POST /v1/auth/login/{provider} API, OAuthLoginUseCase
  • 컨벤션 문서 보강: 요청마다 구현체를 고르는 포트(전략 레지스트리)

📁 참고 자료 (선택)

  • 계획서: docs/plans/oauth-login.md, docs/plans/oauth-server-guide.md (로컬, gitignore 대상)
  • KConnect 측 요청으로 API 명세(주소·경로·응답 필드)는 저장소와 이슈에 남기지 않고 환경 변수로만 주입한다
  • 미포함: 구글·카카오 구현체, Refresh Token, 약관 동의 API, 회원 탈퇴
  • 배포 시 Coolify dev/prod에 KCONNECT_* 환경 변수 등록 필요 (.env.example 참고)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions