JwtAuthGuard
- 액세스 토큰을 발급받은 사용자가 현재 요청을 보낸 사용자와 일치하는지 리프레시 토큰을 통해 비교함
- 로그인한 클라이언트가 요청을 보낼 때 헤더의 Authorization에 액세스 토큰을 담아서 보냄
- 이 액세스 토큰의 Payload에는 사용자 ID가 저장되어 있음. 이 사용자 ID를 추출함
- 사용자 ID를 키값으로 Redis에서 해당 사용자의 리프레시 토큰을 획득함
- 리프레시 토큰의 Payload에서 클라이언트 IP와 발급 당시의 액세스 토큰을 추출함
- 현재 사용자의 액세스 토큰, IP를 리프레시 토큰의 액세스 토큰, IP와 비교하여 접근을 제어함
- 부적절한 액세스 토큰으로 접근하는 경우 리프레시 토큰의 Payload에 저장된 기존 액세스 토큰과의 비교로 접근 제어 가능
- 중복 로그인의 경우 리프레시 토큰의 Payload에 저장된 클라이언트 IP를 비교하여 접속 환경이 다른 경우 접근 제어 가능
PrivateDiaryGuard
- 요청한 일기 데이터가 현재 사용자의 일기가 맞는지 검증함
- 일기 관련 요청을 보낼 때에는 접근하고자 하는 일기의 UUID 값을 요청의 Body에 담아서 보내야 함
- 요청으로 들어온 일기의 UUID 값을 통해 일기 엔티티를 조회함
- 해당 일기 엔티티에 저장된 글쓴이 사용자 ID 값을 획득함
- 로그인한 클라이언트가 요청을 보낼 때 헤더의 Authorization에 액세스 토큰을 담아서 보냄
- 이 액세스 토큰의 Payload에는 사용자 ID가 저장되어 있음. 이 사용자 ID를 추출함
- 두 사용자 ID 값을 비교하여 접근을 제어함
- 적절한 액세스 토큰을 사용했으나 다른 사용자의 일기에 부적절하게 접근하는 경우 사용자 ID를 비교하여 접근 제어 가능
NoDuplicateLoginGuard
- 로그인 요청이 왔을 때 이미 로그인 상태인지 검사하고 접근을 제어함
- 로그인한 클라이언트가 요청을 보낼 때 헤더의 Authorization에 액세스 토큰을 담아서 보냄
- 이 액세스 토큰이 정상적인 상태인지 jwt.verify로 검사함
ExpiredOrNotGuard
- 요청을 보낸 사용자의 액세스 토큰이 정상적이거나 만료된 경우 접근을 허용하는 가드
- 액세스 토큰이 존재하지 않거나, 유효하지 않은 경우 접근 거부
- 해당 사용자의 리프레시 토큰이 존재하지 않거나 만료되었거나 유효하지 않은 경우 접근 거부