Skip to content

[refactor/#431] OAuth/OIDC 보안 인프라 책임 분리#441

Merged
Dimo-2562 merged 8 commits into
developfrom
refactor/#431
Jun 15, 2026
Merged

[refactor/#431] OAuth/OIDC 보안 인프라 책임 분리#441
Dimo-2562 merged 8 commits into
developfrom
refactor/#431

Conversation

@Dimo-2562

Copy link
Copy Markdown
Contributor

❤️ 기능 설명

OAuth/OIDC 로그인 보안 인프라의 책임 경계를 분리했습니다.

  • HttpCookieOAuth2AuthorizationRequestRepositoryTest로 authorization request cookie 저장/조회/삭제 동작을 보강
  • OAuth2 로그인 성공/실패 redirect URL 생성을 OAuth2LoginRedirectUrlFactory로 분리
  • OAuth2 로그인 실패 redirect는 raw exception message 대신 공개용 errorCode=oauth_failed만 노출하도록 변경
  • OAuth2 로그인 token 발급을 side-effect 없는 OAuth2LoginTokenIssuer로 분리
  • refresh token 저장과 cookie 쓰기 side effect를 OAuth2LoginRefreshTokenWriter로 분리
  • OIDC provider별 social identity 추출을 OidcSocialIdentityExtractor로 분리해 CustomOidcUserService는 오케스트레이션만 담당하도록 정리
  • CustomOidcUserServiceTest를 흐름이 보이도록 helper method 기반으로 정리
  • handler.login 패키지 내부 helper/factory/value 타입은 package-private으로 닫아 handler 내부 협력 객체임을 명시

Swagger 테스트 성공 결과 스크린샷 첨부

  • API path, JSON field, status code 변경 없는 Auth/Security 리팩터링이라 Swagger 스크린샷은 해당 없습니다.
  • 아래 CLI 검증 결과와 PR CI로 대체합니다.

연결된 issue

close #431



🩷 Approve 하기 전 확인해주세요!

  • 성공 redirect URL에 access token을 싣는 기존 계약은 이번 PR에서 동작 보존했습니다. 제거 및 frontend refresh 연동은 후속 #440에서 처리합니다.
  • OAuth2/OIDC 실패 redirect와 state cookie 보안 정책 정리는 [IMPROVE] OAuth2/OIDC 실패 redirect와 state cookie 정책 정리 #433, 성공 redirect access token 제거와 redirect 계약 정리는 #440으로 범위를 분리했습니다.
  • handler.loginOAuth2LoginRedirectUrlFactory, OAuth2LoginTokenIssuer, OAuth2LoginRefreshTokenWriter, OAuth2LoginTokens는 의도적으로 package-private입니다. 외부 패키지 재사용 대상이 아니라 login handler 내부 협력 객체입니다.
  • OAuth provider 추가 계획이 없어 Apple/Kakao 분기는 현재 extractor 내부 정책으로 유지했습니다.

✅ 체크리스트

  • PR 제목 규칙 잘 지켰는가?
  • 추가/수정사항을 설명하였는가?
  • 테스트 결과 사진을 넣었는가? (API 계약 변경 없는 리팩터링이라 CLI 결과로 대체)
  • 이슈넘버를 적었는가?

🧪 테스트 결과

git diff --check origin/develop...HEAD
# 통과

./gradlew test --tests 'com.techfork.auth.security.handler.login.*' --tests 'com.techfork.auth.security.oauth.*'
# BUILD SUCCESSFUL, 27 tests passed

참고 검증:

SecurityIntegrationTest를 임시로 MySqlRedisIntegrationTestBase 기반으로 전환해 MySQL/Redis 통합 환경에서 12개 테스트 통과 확인 후 원복했습니다.

🔎 리뷰 결과

$code-review
- HIGH: 성공 redirect access token query 노출 → #440 후속 이슈로 분리
- MEDIUM: 실패 redirect raw exception 노출 → 이번 PR에서 errorCode로 수정 완료
- WATCH: redirect URL String.format 계약 → #440 본문에 후속 정리 범위로 명시
- WATCH: OAuth2LoginTokenIssuer side effect → refresh writer 분리로 수정 완료
- WATCH: provider 분기 확장성 → provider 추가 계획 없음으로 현재 정책 유지

@Dimo-2562 Dimo-2562 self-assigned this Jun 15, 2026
@Dimo-2562 Dimo-2562 added 🌟 REFACTOR 리팩터링 (기능 변화 X) 🔐 domain:auth 인증/보안 관련 (로그인, JWT, OAuth) labels Jun 15, 2026
@Dimo-2562 Dimo-2562 merged commit 8c09d2e into develop Jun 15, 2026
1 check passed
@Dimo-2562 Dimo-2562 deleted the refactor/#431 branch June 15, 2026 12:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🔐 domain:auth 인증/보안 관련 (로그인, JWT, OAuth) 🌟 REFACTOR 리팩터링 (기능 변화 X)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[REFACTOR] OAuth/OIDC 보안 인프라 책임 분리

1 participant