문제 상황
- 개인 일기 서비스에서 가장 중요한 요소는 일기 데이터가 타인에게 노출되지 않는 것이라고 판단함
- 이를 위한 로그인 및 권한 제어 기능이 필요함
해결 방법(실패)
- Stateless한 JWT 기반 인증 방식을 도입함
- Stateless하기 때문에 서버가 클라이언트의 상태를 보존하지 않음. 그저 요청이 왔을 때 이에 대한 응답만 전달하는 역할.
- 서버의 부하가 적다!
- Stateless 방식으로는 개인 데이터 접근 제어에서 발생하는 여러 보안 이슈를 해결하기 매우 제한적임
- 액세스 토큰이 탈취되면 이를 통해 타인의 일기 데이터에 손쉽게 접근 가능함
- 이를 서버에서 막기 힘듬. 서버가 클라이언트의 상태를 보존하지 않기 때문
- 중복 로그인을 막을 수 없음.
- 로그인 요청이 왔을 때 클라이언트의 상태와 무관하게 액세스 토큰을 발급함
새로운 문제 상황
- Stateless 방식은 현재 서비스 상황에서 보안 이슈가 많이 발생함
- 현재 인증, 검증 과정을 요청한 클라이언트가 어떤 상태인지 파악할 필요가 생김
해결 방법
- 리프레시 토큰을 생성해서 클라이언트의 정보를 저장하도록 함
- Redis를 도입해서 리프레시 토큰을 서버 측에서 저장함
Refresh Token 도입
- 커스텀 가드를 사용하면, 서버에 저장된 리프레시 토큰을 통해 현재 요청으로 들어온 액세스 토큰과 요청이 적절한지 확인할 수 있음
커스텀 Guard를 통한 개인 데이터 접근 제어