-
Notifications
You must be signed in to change notification settings - Fork 1
Open
Labels
enhancementNew feature or requestNew feature or request
Description
로그인
- 액세스, 리프레시 발급
- 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 requestNew feature or request
Type
Projects
Status
No status