Skip to content

[BE] JWT 토큰 관리 API 구현 #15

Description

@jiva-z

개요

사용자 인증을 위한 JWT 토큰 시스템을 구현하고, 토큰 만료 전 사용자에게 알림을 제공하여 세션을 연장할 수 있는 기능을 구현합니다.

요구사항

백엔드 구현사항

  • JWT 액세스 토큰 구현

    • 만료 시간: 1시간
    • 토큰에 만료 시간(exp) 포함
    • 사용자 정보 및 필요한 클레임 포함
  • 리프레시 토큰 구현

    • 데이터베이스에 리프레시 토큰 저장
    • 리프레시 토큰 만료 시간 설정
    • 리프레시 토큰 재발급 로직 구현
  • 토큰 갱신 API 엔드포인트 구현

    • /auth/refresh: 리프레시 토큰을 사용하여 새로운 액세스 토큰 발급
    • /auth/extend: 현재 세션 연장 요청 처리

프론트엔드 구현사항

  • 토큰 만료 시간 모니터링

    • 만료 5분 전 알림 표시 로직 구현
    • 토큰의 만료 시간 계산 유틸리티 함수 구현
  • 사용자 알림 UI 구현

    • 모달 또는 토스트 형태의 알림 컴포넌트
    • "세션 연장" 및 "로그아웃" 옵션 제공
  • 자동 토큰 갱신 로직

    • 사용자가 연장을 선택한 경우 토큰 갱신 요청
    • 백그라운드에서 리프레시 토큰을 통한 액세스 토큰 갱신

기술 명세

JWT 토큰 구조

{
  "iss": "our-app",
  "sub": "user-id",
  "exp": "expiration-timestamp",
  "iat": "issued-at-timestamp"
}

API 엔드포인트

  • POST /users/login - 초기 로그인 및 토큰 발급
  • POST /users/refresh - 리프레시 토큰으로 새 액세스 토큰 발급
  • POST /users/extend - 현재 세션 연장
  • POST /users/logout - 로그아웃 및 토큰 무효화

보안 고려사항

  • 리프레시 토큰 암호화 저장
  • XSS 방지를 위한 토큰 저장 방식 결정 (HttpOnly 쿠키 vs localStorage)
  • CSRF 방지 대책 구현
  • 토큰 재사용 방지 로직 구현

테스트 시나리오

  1. 정상적인 로그인 및 토큰 발급
  2. 토큰 만료 5분 전 알림 표시
  3. 세션 연장 시나리오
  4. 리프레시 토큰을 통한 액세스 토큰 갱신
  5. 로그아웃 시 토큰 무효화

예상 작업 시간

  • 백엔드 구현: 2-3일
  • 프론트엔드 구현: 2-3일
  • 테스트 및 버그 수정: 1-2일

관련 문서

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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