로그아웃
- 로그아웃의 경우 유저가 로그인할 때 발급한 액세스 토큰과 리프레시 토큰을 무효화해야 한다.
로그아웃 API 요청 처리하기
- 로그아웃 API 요청이 오는 경우
- 액세스 토큰과 리프레시 토큰을 헤더에서 뽑아낸다.
- 헤더에서 뽑아낸 액세스 토큰과 리프레시 토큰을 사용해 토큰 유효성을 검증한다.
- 액세스 토큰의 만료 시간에서 현재 시간을 뺀 만큼의 시간을 계산한다.(t1)
- 리프레시 토큰의 만료 시간에서 현재 시간을 뺀 만큼의 시간을 계산한다.(t2)
- Redis에 t1 시간동안만 액세스 토큰을 저장한다.
- Redis에 t2 시간동안만 리프레시 토큰을 저장한다.
- t1, t2 시간이 경과하면 Redis에서 액세스 토큰과 리프레시 토큰은 자동 삭제된다.
로그아웃 API 요청 이후 클라이언트 API 요청 처리하기
- 로그아웃 API 요청 이후 클라이언트가 인가 과정이 필요한 API를 요청하는 경우
- 액세스 토큰 strategy의 validate에서 클라이언트가 전달한 액세스 토큰을 사용해 Redis에서 액세스 토큰이 존재하는지 검증한다.
- 이전에 로그아웃 API 로직 실행 시 액세스 토큰을 Redis에 저장하였다.
- Redis에 저장한 액세스 토큰의 저장 만료 시간이 아직 경과하지 않아 클라이언트가 전달한 액세스 토큰과 동일한 액세스 토큰이 Redis에 아직 존재한다면 클라이언트의 요청을 거부한다.
- 이미 만료된 액세스 토큰을 사용하고 있기 때문이다.
만약 클라이언트가 전달한 액세스 토큰과 동일한 액세스 토큰이 Redis에 존재하지 않는다면 요청을 승인한다.
참고