improvement: 로그아웃 시 Access Token 즉시 무효화 (#169) #201

Merged
seonkyu.kim merged 1 commits from improvement/#169-logout-token-blacklist into develop 2026-02-24 08:35:02 +00:00
Owner

📋 작업 요약

  • 로그아웃 시 Access Token을 Redis 블랙리스트에 등록하여 즉시 무효화
  • JTI 기반 블랙리스트, TTL = 남은 만료시간 (자동 삭제)
  • PRD "로그아웃 후 재요청 시 인증 실패" 요구사항 충족

Closes #169

🛠️ 작업 내용 (Changes)

  • SPMS.Application/Interfaces/IJwtService.cs — GetTokenInfo 메서드 추가
  • SPMS.Infrastructure/Auth/JwtService.cs — GetTokenInfo 구현 (JTI, ValidTo 추출)
  • SPMS.Application/Interfaces/IAuthService.cs — LogoutAsync 시그니처 변경 (accessToken 파라미터 추가)
  • SPMS.Application/Services/AuthService.cs — 블랙리스트 로직 추가 (blacklist:{jti}, TTL=남은 만료시간)
  • SPMS.API/Controllers/AuthController.cs — Authorization 헤더에서 Access Token 추출, Swagger 설명 업데이트
  • SPMS.API/Extensions/AuthenticationExtensions.cs — OnTokenValidated에서 블랙리스트 체크

📢 리뷰어 참고 사항 (To Reviewers)

  • ITokenStore(RedisTokenStore) 재활용 — 별도 인터페이스 추가 없음
  • 기존 DI 의존성 변경 없음 (AuthService에 IJwtService, ITokenStore 이미 주입됨)
  • API 스펙 변화 없음 (요청/응답 포맷 동일)

체크리스트 (Self Checklist)

  • 빌드(Build)가 성공적으로 수행되었는가?
  • 모든 단위 테스트(Unit Test)를 통과하였는가?
  • 불필요한 로그나 주석을 제거하였는가?
  • 컨벤션(Clean Architecture, Naming)을 준수하였는가?
  • 기밀 정보(비밀번호, 키 등)가 하드코딩 되어있지 않은가?

📸 스크린샷 / 테스트 로그 (Screenshots/Logs)

dotnet build → 경고 0개, 오류 0개
dotnet test → 전체 통과
## 📋 작업 요약 - 로그아웃 시 Access Token을 Redis 블랙리스트에 등록하여 즉시 무효화 - JTI 기반 블랙리스트, TTL = 남은 만료시간 (자동 삭제) - PRD "로그아웃 후 재요청 시 인증 실패" 요구사항 충족 ## 🔗 관련 이슈 (Related Issues) Closes #169 ## 🛠️ 작업 내용 (Changes) - [x] `SPMS.Application/Interfaces/IJwtService.cs` — GetTokenInfo 메서드 추가 - [x] `SPMS.Infrastructure/Auth/JwtService.cs` — GetTokenInfo 구현 (JTI, ValidTo 추출) - [x] `SPMS.Application/Interfaces/IAuthService.cs` — LogoutAsync 시그니처 변경 (accessToken 파라미터 추가) - [x] `SPMS.Application/Services/AuthService.cs` — 블랙리스트 로직 추가 (blacklist:{jti}, TTL=남은 만료시간) - [x] `SPMS.API/Controllers/AuthController.cs` — Authorization 헤더에서 Access Token 추출, Swagger 설명 업데이트 - [x] `SPMS.API/Extensions/AuthenticationExtensions.cs` — OnTokenValidated에서 블랙리스트 체크 ## 📢 리뷰어 참고 사항 (To Reviewers) - ITokenStore(RedisTokenStore) 재활용 — 별도 인터페이스 추가 없음 - 기존 DI 의존성 변경 없음 (AuthService에 IJwtService, ITokenStore 이미 주입됨) - API 스펙 변화 없음 (요청/응답 포맷 동일) ## ✅ 체크리스트 (Self Checklist) - [x] 빌드(Build)가 성공적으로 수행되었는가? - [x] 모든 단위 테스트(Unit Test)를 통과하였는가? - [x] 불필요한 로그나 주석을 제거하였는가? - [x] 컨벤션(Clean Architecture, Naming)을 준수하였는가? - [x] 기밀 정보(비밀번호, 키 등)가 하드코딩 되어있지 않은가? ## 📸 스크린샷 / 테스트 로그 (Screenshots/Logs) ``` dotnet build → 경고 0개, 오류 0개 dotnet test → 전체 통과 ```
seonkyu.kim added 1 commit 2026-02-24 08:34:06 +00:00
- IJwtService/JwtService에 GetTokenInfo(JTI, 만료시간 추출) 추가
- LogoutAsync에 Redis 블랙리스트 로직 추가 (key: blacklist:{jti}, TTL: 남은 만료시간)
- AuthenticationExtensions OnTokenValidated에서 블랙리스트 체크
- 로그아웃 후 동일 Access Token 재사용 시 401 반환

Closes #169
seonkyu.kim self-assigned this 2026-02-24 08:34:18 +00:00
seonkyu.kim added this to the Phase 0: 공통 기반 + 인증 milestone 2026-02-24 08:34:21 +00:00
seonkyu.kim added the
Priority
Medium
Status
In Progress
Type
Improvement
labels 2026-02-24 08:34:26 +00:00
seonkyu.kim requested review from Owners 2026-02-24 08:34:36 +00:00
seonkyu.kim merged commit 10460b40c3 into develop 2026-02-24 08:35:02 +00:00
seonkyu.kim deleted branch improvement/#169-logout-token-blacklist 2026-02-24 08:35:15 +00:00
seonkyu.kim added
Status
Done
and removed
Status
In Progress
labels 2026-02-24 08:35:16 +00:00
Sign in to join this conversation.
No description provided.