Skip to content

feat: JWT 로그인 인증과 인증 컨텍스트 분기 추가#76

Merged
Whale0928 merged 7 commits into
mainfrom
feat/sso-jwt-auth
Jul 13, 2026
Merged

feat: JWT 로그인 인증과 인증 컨텍스트 분기 추가#76
Whale0928 merged 7 commits into
mainfrom
feat/sso-jwt-auth

Conversation

@Whale0928

@Whale0928 Whale0928 commented Jul 11, 2026

Copy link
Copy Markdown
Owner

요약

  • SSO 로그인 성공을 일회용 교환 코드에서 RS256 access JWT와 opaque refresh token으로 교환하도록 구현했습니다.
  • refresh token rotation, 5초 grace 정책, grace 이후 재사용 시 session family 폐기를 추가했습니다.
  • API Key, 로그인 JWT, OAuth2 access token 타입을 분리해 Spring SecurityContext를 설정하도록 구성했습니다.
  • OAuth2 access token 인증은 의도적으로 미구현 상태를 유지하고 HTTP 401로 fail-closed 처리했습니다.
  • UserAccount 대표 이메일을 필수·고유 값으로 만들고, 신뢰할 수 있는 동일 이메일의 Google/GitHub 로그인을 한 사용자에 연결했습니다.
  • GitHub는 primary·verified 이메일만 사용하고, Google은 verified Gmail 또는 서명된 hd claim이 있는 이메일만 허용합니다.
  • 로그인 UI 연동과 인증 계약, ADR 문서를 갱신했습니다.

영향

  • /api/v1/auth/exchange, /csrf, /refresh, /me 인증 흐름을 사용할 수 있습니다.
  • 기존 API Key 인증은 유지되며 로그인 JWT와 명확히 분리됩니다.
  • refresh token 원문은 저장하지 않고 SHA-256 hash만 MySQL에 저장합니다.
  • 대표 이메일이 없거나 provider가 현재 소유권을 보장하지 못하면 SSO 로그인을 완료하지 않습니다.
  • 아직 배포 전인 V2 migration을 직접 수정해 primary_email NOT NULL·UNIQUE·binary collation을 적용했습니다.

검증

  • Java 테스트 240개 통과: 실패 0, 오류 0, skip 0
  • Spotless 전체 검사와 git diff --check 통과
  • fresh MySQL에서 Flyway V1~V3, 대표 이메일 제약, Unicode 충돌 분리, 동시 provider 연결을 검증
  • UI typecheck와 로그인 인증 invariant 테스트 통과

@Whale0928 Whale0928 marked this pull request as ready for review July 13, 2026 03:19
@Whale0928 Whale0928 merged commit 89b0450 into main Jul 13, 2026
2 checks passed
@Whale0928 Whale0928 deleted the feat/sso-jwt-auth branch July 13, 2026 03:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant