Skip to content

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

@JONGTAE02

Description

@JONGTAE02

Description

  1. Summary
    보안 강화를 위해 Refresh Token Rotation(RTR) 정책을 도입하고, Redis를 활용하여 토큰의 수명 주기 및 로그아웃(Blacklist) 기능을 관리합니다. 기존의 단순 JWT 발급 방식에서 나아가, 탈취된 Refresh Token의 재사용을 방지하고 즉각적인 로그아웃 처리가 가능하도록 구현합니다.

  2. 주요 작업 내용 (Tasks)
    [ ] JWT Provider 로직 고도화
    Access Token(단기)과 Refresh Token(장기) 생성 메서드 분리
    토큰 유효성 검증 로직 강화

[ ] Token Service (비즈니스 로직) 구현
Rotation: 재발급 요청 시 기존 토큰 삭제 및 신규 토큰 발급 (RTR 적용)
Blacklist: 로그아웃 요청 시 Redis에서 해당 Refresh Token 삭제
Security: 이미 사용된(삭제된) 토큰으로 재요청 시 예외 처리

[ ] API 및 핸들러 연동
OAuth2SuccessHandler: 로그인 성공 시 Redis에 Refresh Token 저장
AuthController: 토큰 재발급(/reissue) 및 로그아웃(/logout) API 구현

  1. 기술 스택 (Tech Stack)
    -Spring Boot 3.x
    -Spring Security & OAuth2 Client
    -Spring Data Redis
    -JWT (JJWT)

  2. 테스트 시나리오 (Acceptance Criteria)
    (1)로그인: GitHub 로그인 성공 시 Access Token과 Refresh Token이 발급되며, Redis에 Refresh Token이 저장되어야 함.
    (2)재발급(Rotation): /reissue 요청 시 기존 Refresh Token은 Redis에서 삭제되고, 새로운 토큰 쌍이 발급되어야 함.
    (3)보안 검증: 이미 사용된(Rotation된) Refresh Token으로 재발급 시도 시 요청이 거부되어야 함.
    (4)로그아웃: /logout 요청 시 Redis에서 해당 토큰이 즉시 삭제되어야 함.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions