세션방식 vs JWT 토큰 방식 로그

컴업·2023년 12월 19일
0
post-custom-banner

세션 로그인 방식

세션 기반 로그인 방식은 웹 애플리케이션에서 널리 사용되어왔던 방식이다.
서버는 사용자가 로그인할 때 세션을 생성하고, 이 세션 정보를 세션 저장소에 저장한다. 사용자는 이 세션ID를 가진 쿠키를 잔달받아, 이후의 요청에서 로그인 되있음을 인증한다.

로그인 과정

  1. 사용자가 로그인 request를 서버에 요청한다.
  2. 서버는 로그인 request를 검증하고, 세션을 생성하여 세션 저장소에 저장한다.(DB에 저장하는 경우가 많다.)
  3. 서버는 세션ID를 사용자에게 반환한다.
  4. 사용자는 세션ID를 포함하는 쿠키와 함게 자원에 대한 request를 요청한다.
  5. 서버는 전달받은 세션ID가 세션저장소에 있는지, 또 유효한지 검증한다.
  6. 서버는 사용자에게 자원을 반환한다.

장/단점

세션은 서버에 저장되기 때문에, 그에 대한 관리 권한은 서버에있다. 덕분에 만약 비정상적인 사용자의 움직임을 포착했을 경우 서버 관리자는 그 즉시 해당 세션을 만료시킬 수 있다.

반면에 세션에 대한 관리 또한 서버측에서 해야함으로 모든 요청에 대한 세션 검증작업이 필요하다. 이는 데이터 베이스에 부하를 일으킬 수 있으며, 만약 DB 세션저장소가 아닌 메모리 저장소를 사용하는 경우에는 서버메모리 부담, 로드 밸런싱 문제, 서버 장애 대응 문제 등 여러가지 한계가있다.

토큰 로그인 방식

토큰은 변조할 수 없는 인증 파일이다. 이는 secretKey를 사용해서 서버단에서 생성되고, 사용자 로컬환경에 저장된다. 사용자는 이 토큰을 포함한 request를 통해 로그인 되었음을 인증한다.

로그인 과정

  1. 사용자가 로그인 request를 서버에 요청한다.
  2. 서버는 로그인 reqeuest를 검증하고, 토큰을 생성하여 사용자에게 반환한다.
  3. 사용자가 request에 토큰을 포함하여 서버측으로 요청한다.
  4. 서버는 토큰을 검증하고, 유효한 토큰일 경우 자원을 반환한다.

장/단점

서버는 사용자의 요청을 승인하기 위해 모든 세션 세부 정보를 지속적으로 체크할 필요가 없기 때문에 성능을 향상시킬 수 있다.

그러나 토큰은 사용자에 저장됨으로, 세션방식과 같은 특정 보안 작업을 수행하기 어렵다. 때문에 공격자가 유효한 토큰을 얻으면 서버 자원에 무한정 접근할 수 있기 때문에 토큰의 만료 기간을 짧게 설정하는 경우가 많다.


출처
https://www.geeksforgeeks.org/session-vs-token-based-authentication/
https://mangkyu.tistory.com/55

profile
좋은 사람, 좋은 개발자 (되는중.. :D)
post-custom-banner

0개의 댓글