[withUs] 다중로그인 문제

JunWoo An·2024년 2월 20일
0

스파르타코딩클럽

목록 보기
45/46

유저 테스트 도중 다중로그인이 가능하다는 피드백을 받게되었다.

원인

  • 본 프로젝트에서 채택한 Token 방식의 Stateless 특성으로 인해 기존에 발급한 토큰을 임의로 무효화 등의 조작이 불가능하기 때문에(Token의 한계점) 여러 브라우저에서 동시에 로그인하여 토큰을 발급할시 모든 토큰이 지정된 유효기간 만료시까지 요청이 가능하다는 문제점을 발견

해결방안

  • 기 발급된 토큰을 확인하는 로직을 추가
    -> 발급된 토큰의 정보를 저장해야 하는 로직 또한 추가되어야 하며 모든 API 요청시마다 이를 검증
    -> 번번히 검증이 일어나기 때문에 해당 토큰이 저장되있는 MYSQL의 부하가 상승하여 비즈니스로직의 영향을 우려하여 토큰의 저장소를 RDBMS에서 NOSQL인 Redis로 변경
    (또한 토큰의 수정,삭제 보다는 조회가 차지하는 비중이 높기때문에 NOSQL이 더 빠르다는 장점또한 가지고있음, 토큰의 만료시 자동으로 삭제되기때문에 추가적인 스케줄러 작업또한 필요없어짐)
    -> 마지막 로그인한 토큰만 저장하여 요청시 이를 조회하여 일치할경우에만 인가로직 구현
    -> Scale Out시 In-memory저장소의 경우 다른 서버에 저장되있는 토큰의 정보를 불러올수 없기때문에 RedisAWS Elastic Cache를 사용하여 외부로 독립 예정

로그인시 토큰을 발급하고 이를 Redis에 저장하는 로직
(AccessToken의 유효기간 : 30분, RefreshToken의 유효기간 : 7일)


해결

profile
도전하는 사람

0개의 댓글