Skip to content

Jwt 토큰 방식의 로그인

KIYUN KIM edited this page Apr 5, 2022 · 18 revisions

1. 도입 이유

일반적으로 Stateless한 http 환경에서 로그인같은 상태를 유지해야하는 기능을 구현할때 유저 정보가 담긴 Jwt토큰을 클라이언트단에 저장하는 토큰 방식이나 세션을 서버에 저장하는 세션 방식을 사용하여 구현합니다. 여기서 세션방식은 토큰방식보다는 보안상 안전하지만 모든 유저의 정보를 서버에 저장하기 때문에 서비스의 규모가 커지면 세션을 관리하기도 어렵고 서버에 부하도 많이 갑니다. 그래서 서버에 부하를 주지도 않고 별도의 인증 저장소를 필요로 하지 않는 토큰 방식을 채택하기로 하였으며 추가로 사용자 입장에서 서비스마다 회원가입을 해야하는 부담을 줄이기 위해 네이버나 카카오 같은 대형서비스에서 관리하는 유저 정보를 이용하여 로그인하는 Oauth 2.0 기술도 적용하여 구현하였습니다.

2. 문제 상황, 해결 방안

Jwt 토큰 방식으로 구현하던 중 한번 생성된 토큰은 더이상 제어할 수 없어 만약 유효기간이 남은 토큰이 탈취되더라도 해킹을 막을 방법이 없다는 사실을 알게 되었습니다. 그렇다고 토큰의 유효기간을 짧게 설정하면 그만큼 자주 로그인을 다시 해야하기 때문에 유저입장에서 서비스를 사용하는데 불편해질 것입니다. 그래서 토큰이 탈취 당했을때를 대비해 토큰의 유효기간을 짧게 설정하여 클라이언트의 로컬 스토리지에 저장하고 또 다른 토큰을 유효기간을 길게 설정한 후 클라이언트와 서버 양쪽에 저장하여 액세스 토큰이 만료 됐을때 새 토큰을 발급해주는 수단으로 사용하기로 했습니다.

Clone this wiki locally