Skip to content

Comments

Feat: Redis 기반 Refresh Token Rotation 및 로그아웃(Blacklist) 구현#11

Merged
byb0823 merged 5 commits intodevelopfrom
feature/redis-token-management
Nov 30, 2025
Merged

Feat: Redis 기반 Refresh Token Rotation 및 로그아웃(Blacklist) 구현#11
byb0823 merged 5 commits intodevelopfrom
feature/redis-token-management

Conversation

@JONGTAE02
Copy link
Contributor

관련 이슈 (Related Issue)

  • Closes feat: Redis 기반 Refresh Token Rotation 및 로그아웃(Blacklist) 구현 #10
    Summary
    보안 강화를 위해 Redis를 도입하고, 탈취된 토큰의 재사용을 막기 위한 Refresh Token Rotation (RTR) 정책과 로그아웃(Blacklist) 기능을 구현했습니다. 이제 사용자가 토큰을 재발급받을 때마다 기존 Refresh Token은 폐기되고 새로운 토큰이 발급됩니다.

상세 구현 사항 (Technical Details)

  1. Redis Entity 추가
    -RefreshToken 엔티티 구현 (Redis Hash 구조, TTL 14일 설정)
    -RefreshTokenRepository 추가 (CRUD 담당)

  2. JWT Provider 고도화
    -기존 createToken 메서드를 createAccessToken과 createRefreshToken으로 분리하여 토큰별 만료 시간을 다르게 적용했습니다.

3.TokenService (핵심 로직)
-Rotation: /reissue 요청 시 기존 토큰을 Redis에서 삭제하고 새 토큰을 저장하는 트랜잭션 로직 구현.
-Logout: /logout 요청 시 Redis에서 해당 Refresh Token을 즉시 삭제.
-Validation: 이미 삭제된 토큰으로 접근 시 예외 발생 (보안 처리).

4.API 및 핸들러 연동
-AuthController: 토큰 재발급, 로그아웃 API 엔드포인트 추가.
-OAuth2SuccessHandler: 로그인 성공 시 Refresh Token을 Redis에 저장하도록 로직 수정.

테스트 결과

  1. 로그인 시 Redis 저장 확인
    GitHub 로그인 성공 후 Redis에 refreshToken Key 생성 확인.

  2. 토큰 재발급 (Rotation) 테스트
    Swagger를 통해 /reissue 호출 시 200 OK 응답.
    Redis CLI 확인 결과: [구 토큰] 삭제됨, [신규 토큰] 생성됨.

  3. 로그아웃 테스트
    /logout 호출 후 Redis에서 Key가 완전히 사라짐을 확인.

  4. 보안 검증
    이미 사용된(Rotation 된) 토큰으로 재요청 시 500 Internal Server Error (유효하지 않은 토큰) 발생 확인.

[Note]
로컬 테스트를 위해 잠시 생성했던 TestController는 삭제 후 커밋했습니다.
SecurityConfig의 permitAll 설정은 기존과 동일하게 유지했습니다.

@byb0823 byb0823 merged commit 6a20584 into develop Nov 30, 2025
1 check passed
@JONGTAE02 JONGTAE02 deleted the feature/redis-token-management branch November 30, 2025 11:50
@JONGTAE02 JONGTAE02 restored the feature/redis-token-management branch November 30, 2025 11:50
byb0823 added a commit that referenced this pull request Dec 3, 2025
Feat: Redis 기반 Refresh Token Rotation 및 로그아웃(Blacklist) 구현
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.

2 participants