Skip to content

Redis를 이용한 로그아웃 API #124

@dldmldlsy

Description

@dldmldlsy

로그인

  • 액세스, 리프레시 발급
  • key-value : 이메일-리프레시 로 redis에 저장

액세스 만료 시, 리프레시 토큰으로 액세스 재발급

  • refresh 토큰이 DB에 있는지 확인
  • refresh 속 이메일, DB의 해당 리프레시 토큰 이메일 일치 여부 확인
  • refresh 토큰 유효성 검증 검증 -> 실패 시 재로그인 필요
  • 액세스 토큰 재발급

로그아웃

  • 해당 회원의 액세스, 리프레시 모두 무효화(토큰 만료)해야 함 ->
  • 로그아웃 하고 싶은 토큰들을 블랙리스트에 모음
  • 블랙리스트에 토큰이 들어오면 해당 토큰 무효화 진행

Redis 사용하는 이유

  • 유효 기간이 존재하므로 RDBMS에 저장하면 배치를 이용해 주기적으로 삭제해야 함.
  • 주기적으로 삭제하는 번거로움 없어짐
  • 로그아웃 할 때에도 사용 가능

Redis 사용 과정
로그인

  • redis에 리프레시 토큰 저장 (이메일(키), 리프레시토큰(값), 리프레시토큰 유효시간)

로그아웃

  • 액세스 토큰 유효성 검증
  • 액세스 토큰의 이메일 가져와서-> 해당 이메일이 key인 리프레시 토큰이 있을 경우 삭제 (없을 경우는 리프레시 토큰 만료돼서 자동 삭제 된 경우 = 로그아웃 할 필요없음)
  • 액세스 토큰을 블랙리스트로 저장 (액세스토큰(키), "logout"(값), 액세스 토큰 유효시간)
  • 블랙리스트로 등록하는 액세스 토큰에 유효시간을 남은 유효시간 만큼 준다. -> 남은 유효시간동안 블랙리스트로 등록되어있어서 로그인 불가/ 유효시간 이후에 만료되어서 로그인 불가 + 블랙리스트에서도 자동으로 삭제.

우선 할 일

  • redis 설정
  • (로그인) 로그인 시 리프레시 토큰 redis에 저장 (key: 이메일, value: 리프레시 토큰, 유효시간)
  • (로그인) 해당 이메일로 이미 리프레시 토큰이 있다면 새로 발급한 리프레시 토큰으로 변경
  • (로그아웃) 액세스 토큰 유효성 검증
  • (로그아웃) 액세스 토큰의 이메일이 key인 리프레시 토큰 삭제
  • (로그아웃) 액세스 토큰 redis에 저장 (key: 액세스 토큰, value: "logout", 남은 액세스 토큰 유효시간)
  • 회원기능 api접근 시 블랙리스트에 있는 토큰인지 확인하는 로직 추가 (로그아웃한 대상인지)

토큰 재발급 PR merge 후에 할 일

  • 리프레시 토큰 속에 유저정보 넣지 않도록 변경
  • (재발급) 리프레시 토큰이 redis에 있는지 확인
  • (재발급) 받은 이메일, redis의 이메일이 일치하는지 확인 (?????)

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Type

No type

Projects

Status

No status

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions