0) 목표와 전제
목표
- *분산 환경(ECS 2대 이상)**에서도 인증/인가가 일관되게 동작(서버 로컬 세션 X)
- 단일 세션 강제: “기존 로그인 있으면 강제 로그아웃”을 확실히 보장
- 유휴 자동 로그아웃: 일정 시간 동안 요청이 없으면 세션 종료(서버 기준)
- Refresh 탈취 대응: rotation + reuse detection + 강제 세션 무효화
- *실시간(WebSocket/SSE)**까지 포함해 인증이 안전하게 동작
- 장애/운영 관점에서 구현/디버깅/확장이 가능한 구조
전제(결정사항)
- 모듈: 2모듈
app-api(메인 API + 보안 + WS/SSE)
app-batch(배치 + outbox + purge + consumer)
- 토큰:
- Access Token:
Authorization: Bearer ... 헤더
- Refresh Token: HttpOnly Secure 쿠키
- 강제 로그아웃:
- 새 로그인 시 기존 세션 종료(단일 세션)
- 권한 변경/잠금 변경 시 기존 세션 종료
- Redis 사용:
- Idle(유휴) 세션 관리
- 단일 세션(현재 활성 refresh 세션) 관리
- (블랙리스트는 일단 사용하지 않음: A 정책)
- Kafka(Confluent), Mongo(Projection) 사용 가능(보안 이벤트/audit에도 활용 가능)
1) 2모듈 원칙에 맞춘 책임 분리
1-1) app-api 모듈(메인 API) — 보안의 중심
포함
- Spring Security(FilterChain)