세션은 사용해봤으니까 토큰방식을 사용하고 싶은데,
passport + JWT 방식으로 로그인상태를 유지/관리 하는 어플리케이션을 구현할 수 있다.
JWT 사용시 case1) 액세스토큰만 사용
JWT 사용시 case2) 액세스토큰 + 리프레시토큰 사용
case1 | case2 | ||
---|---|---|---|
구현난이도 | 낮 | 높 | |
IO 비용 (응답속도와 비례할 수 있음) | 낮 | 높 | |
토큰 탈취 | 가능 | 가능 | |
토큰 탈취에 대한 보안 강화 | 낮음 | 높음 | 액세스토큰은 빠르게 만료 시킨다. |
리프레시토큰은 느리게 만료 시킨다. |
액세스 토큰의 탈취시 피해를 최소화 한다. but. 리프레시 토큰의 저장에대해 보안 강화 해야한다. |
구현난이도가 쉽고 프로그램 속도개선에 도움이 되는 case1을 채택하고,
보안이 약한점을 토큰의 [클라이언트 IP, 에이전트 정보] 를 사용해서 검증하는 로직을 추가해서 최대한 토큰 탈취에 대한 위험을 보완하는 방식으로 하자.
결론 >> 그럼 passport + JWT + 몽구스로 구현부터 해보자