어떤 기능인가요?
KConnect(국민대 학생용 OAuth)로 로그인한다. 앱·웹이 PKCE 로그인으로 받은 { code, codeVerifier, redirectUri }를 서버에 보내면, 서버가 토큰을 교환하고 K-계정 API로 사용자를 확인한 뒤 회원을 찾거나 만들어 서비스 JWT를 발급한다.
- provider별 로직은 전략 인터페이스
OAuthClient로 분리한다. 요청 경로의 {provider}로 구현체를 고르므로 나중에 구글·카카오를 KConnect와 함께 붙일 수 있다.
- provider 계정과 회원의 연결은 auth 도메인의
oauth_accounts 테이블이 가진다. member 도메인은 OAuth를 모른다.
- 로그인 응답의
termsAgreementRequired는 member_term_agreements 상태로 매번 판단한다. 가입 후 약관에 동의하지 않고 이탈했다가 다시 로그인한 경우도 처리된다.
📝 작업 상세 내용
📁 참고 자료 (선택)
- 계획서:
docs/plans/oauth-login.md, docs/plans/oauth-server-guide.md (로컬, gitignore 대상)
- KConnect 측 요청으로 API 명세(주소·경로·응답 필드)는 저장소와 이슈에 남기지 않고 환경 변수로만 주입한다
- 미포함: 구글·카카오 구현체, Refresh Token, 약관 동의 API, 회원 탈퇴
- 배포 시 Coolify dev/prod에
KCONNECT_* 환경 변수 등록 필요 (.env.example 참고)
어떤 기능인가요?
KConnect(국민대 학생용 OAuth)로 로그인한다. 앱·웹이 PKCE 로그인으로 받은
{ code, codeVerifier, redirectUri }를 서버에 보내면, 서버가 토큰을 교환하고 K-계정 API로 사용자를 확인한 뒤 회원을 찾거나 만들어 서비스 JWT를 발급한다.OAuthClient로 분리한다. 요청 경로의{provider}로 구현체를 고르므로 나중에 구글·카카오를 KConnect와 함께 붙일 수 있다.oauth_accounts테이블이 가진다. member 도메인은 OAuth를 모른다.termsAgreementRequired는member_term_agreements상태로 매번 판단한다. 가입 후 약관에 동의하지 않고 이탈했다가 다시 로그인한 경우도 처리된다.📝 작업 상세 내용
OAuthProvider·OAuthLoginCommand·OAuthUserInfo·OAuthErrorCode, 전략OAuthClient,OAuthService.authenticate,OAuthClientRegistryOAuthAccount·OAuthAccountRepository, Flywayoauth_accounts, JPA Entity·RepositoryImplinfrastructure:clientKConnect 구현체: 토큰 교환(타임아웃·에러 매핑), 사용자 정보 조회gateway:auth토큰 발급 파사드AuthTokenIssuer, 로그인 경로 permitAllPOST /v1/auth/login/{provider}API,OAuthLoginUseCase📁 참고 자료 (선택)
docs/plans/oauth-login.md,docs/plans/oauth-server-guide.md(로컬, gitignore 대상)KCONNECT_*환경 변수 등록 필요 (.env.example참고)